Comparaison stations référentes VS les autres :

Dans ce document nous allons comparer les stations référentes, dites stations du réseau régional patrimonial. Elles sont censées avoir au moins 12 prelevement par an.

Stats déscriptive sur les stations de références
NbreAnMoy NbrePrlvtMoy NbreAnalyseMoy NbrePrlvtMoyParAn NbreAnalyseMoyParAn nbre_ME
12.1 186.3 45440.6 15.2 3730.9 32
Nombres de prelevement par années pour les stations référentes
code_station 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018
04102500 12 NA 12 7 7 19 7 17 19 22 12 22
04102990 NA 12 NA NA 12 19 11 18 29 12 20 12
04104500 12 7 12 7 7 17 7 18 25 12 11 20
04108500 12 NA 12 7 7 12 6 12 16 12 12 20
04115200 12 7 12 7 7 12 6 12 18 12 12 19
04119300 NA 3 1 7 7 10 7 12 12 12 12 12
04123980 12 9 12 7 7 12 7 12 14 12 12 12
04125800 12 12 12 7 7 12 6 12 14 18 16 12
04132000 12 9 21 19 17 18 8 19 19 23 12 22
04132500 12 16 21 19 17 17 7 18 19 22 12 22
04133075 12 10 12 19 19 21 19 24 24 22 12 11
04134010 NA 21 NA 17 19 18 6 18 20 12 12 4
04134700 19 21 18 20 19 19 18 19 18 17 18 18
04135000 12 NA 12 7 7 19 7 18 20 22 12 18
04143150 12 NA 12 7 7 12 7 12 14 12 21 24
04145000 12 8 21 20 19 12 7 12 12 24 12 25
04146000 12 8 18 19 19 19 18 19 21 16 18 18
04146500 12 6 20 18 19 19 NA 18 19 12 16 16
04148570 12 7 7 7 7 12 5 12 12 12 18 11
04148587 NA 8 9 19 19 18 6 18 19 12 12 12
04149400 NA 3 1 NA NA 12 NA 12 12 12 12 12
04150515 12 NA NA NA NA 9 NA 18 19 12 12 12
04152000 12 6 21 19 19 19 NA 18 19 16 12 15
04153160 12 7 6 7 7 17 4 18 19 10 12 9
04155500 12 6 17 20 19 18 18 18 21 17 18 18
04158000 12 7 7 7 8 19 7 18 19 12 12 12
04215485 12 NA 12 7 7 19 7 17 18 23 12 18
044000001 12 12 12 12 12 13 18 12 15 16 12 12
044000087 12 10 12 12 12 15 17 13 17 13 12 12
049000402 16 15 16 21 16 14 17 12 14 13 12 12
049000461 15 14 15 17 14 19 21 16 13 14 13 12
049000795 12 9 9 13 11 15 10 12 11 11 12 11
072000052 12 12 12 12 14 12 15 12 12 12 13 11
## `summarise()` ungrouping output (override with `.groups` argument)
Stats déscriptive sur les autres stations
NbreAnMoy NbrePrlvtMoy NbreAnalyseMoy NbrePrlvtMoyParAn NbreAnalyseMoyParAn nbre_ME
6 50.8 7973.3 7.4 1187.8 311
## Adding missing grouping variables: `mois`

## Adding missing grouping variables: `mois`

## Joining, by = "code_station"

dates d’apparitions des molécules….

Analyses des pesticides sur les stations référentes :

On commence par selectionner les 15 substances les plus quantifiées entre 2007 et 2017

15 substances les plus quantifiées

Taux de quantification

Quantification selon les années :

Nombres de prelevement supérieur à 0 :

Passons aux pesticides définit comme prioritaire ou dangereux par l’Arrêté du 07/09/15 :

Quantification selon les années :

Nombres de prelevement supérieur à 0 :

Analyses des pesticides sur les autres stations :

Analyses des pesticides sur les autres stations avec les 15 substances les plus quantifiées

15 substances les plus quantifiées

Taux de quantification

Quantification selon les années :

Nombres de prelevement supérieur à 0 :

Passons aux pesticides définit comme prioritaire ou dangereux par l’Arrêté du 07/09/15 :

Quantification selon les années :

Nombres de prelevement supérieur à 0 :

Descriptive Stations REFS :

Moy Mensuelle de chaque pesticides :

Moy Mensuelle + P90 de chaque pesticides separés:

Cumul par mois des principales substances ::

Notes des stations référentes :

Notes des substances sur stations reférentes :

Avec le nombres de substances total par année.

Descriptive Stations Autres :

Moy Mensuelle de chaque pesticides :

Pesticides Separés :

Cumul par mois des principales substances ::

Notes des stations Non-référentes :

Notes des substances sur stations Non-reférentes :

Avec le nombres de substances analysée par années.

Depassement du PNEC

Cote à cote :

Sur stations referentes :

Sur autres stations :

IPCE

## `summarise()` regrouping output by 'annee' (override with `.groups` argument)
## `summarise()` regrouping output by 'annee' (override with `.groups` argument)

Depassement du NQE_CMA et NQE_MA :

Station REF

Station Non-REF

{-}

Le seqEau :

Station REF

Station Non-REF

LS0tCnRpdGxlOiAiQW5hbHlzZXMgc3RhdGlvbnMgcmVmIHZzIG5vbi1yZWYuIgphdXRob3I6ICJTaW1vbiBEdXJhbmQiCmRhdGUgOiAiYHIgZm9ybWF0KFN5cy50aW1lKCksICclZCAlQiwgJVknKWAiCm91dHB1dDoKICBodG1sX2RvY3VtZW50OiAKICAgIG9mZmxpbmU6IGZhbHNlCiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgdG9jX2RlcHRoOiA0CiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlCiAgcGRmX2RvY3VtZW50OiBkZWZhdWx0IApiaWJsaW9ncmFwaGllOiBybWFya2Rvd25iaWJsaW8uYmliCi0tLQoKYGBge3Igc2V0dXAsIGVjaG89RkFMU0V9CiBrbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEZBTFNFLCB3YXJuaW5nID0gRkFMU0UpCiAjcmVtb3Rlczo6aW5zdGFsbF9naXQodXJsID0gImh0dHBzOi8vZ2l0bGFiLmNvbS9kcmVhbC1kYXRhbGFiL2RyZWFsZG93biIpCgogI3JtYXJrZG93bjo6cmVuZGVyKCkKICN0b2NfZmxvYXQ6IHllcwpgYGAKIAoKYGBge3IgaW5jbHVkZSA9PSAiRkFMU0UiLCBtZXNzYWdlID0gRkFMU0V9CgojIyMjIExpYnJhcnkgIyMjIwojZGV2dG9vbHM6Omluc3RhbGxfZ2l0aHViKCJ3YWxrZXJrZS9ic3NlbGVjdFIiKQojbGlicmFyeShkcmVhbGRvd24pCgpsaWJyYXJ5KHRyZW5kKQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShmY3VrKQpsaWJyYXJ5KGNhcikKbGlicmFyeShzdHJpbmdyKQpsaWJyYXJ5KGJzc2VsZWN0UikKbGlicmFyeShyZWFkeGwpCmxpYnJhcnkoc3RyaW5ncikKbGlicmFyeShwYWNrcmF0KQpsaWJyYXJ5KGRhdGEudGFibGUpCmxpYnJhcnkoZmFjdG9leHRyYSkKbGlicmFyeShjbHVzdGVyKQpsaWJyYXJ5KEZhY3RvTWluZVIpCmxpYnJhcnkoZ3JpZEV4dHJhKQpsaWJyYXJ5KGRlbmRleHRlbmQpCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShrbml0cikKbGlicmFyeShEVCkKbGlicmFyeShrYWJsZUV4dHJhKQoKbG9hZChmaWxlID0iZGF0YS9hbmFseXNlX0F1dHJlLlJEYXRhIikKbG9hZChmaWxlID0iZGF0YS9hbmFseXNlX3JlZi5SRGF0YSIpCnNvdXJjZSgiUi90YWJfZ2xvYmFsLlIiKQoKCmBgYAoKYGBge2NzcywgZWNobz1GQUxTRX0KcCB7CiAgZm9udC1zaXplOiAyMHB4Owp9CgpoMSwgaDIsIGgzIHsgCiAgdGV4dC1hbGlnbjogY2VudGVyOwp9CmBgYAoKIyBDb21wYXJhaXNvbiBzdGF0aW9ucyByw6lmw6lyZW50ZXMgVlMgbGVzIGF1dHJlcyA6IAoKRGFucyBjZSBkb2N1bWVudCBub3VzIGFsbG9ucyBjb21wYXJlciBsZXMgc3RhdGlvbnMgcsOpZsOpcmVudGVzLCBkaXRlcyBzdGF0aW9ucyBkdSByw6lzZWF1IHLDqWdpb25hbCBwYXRyaW1vbmlhbC4gRWxsZXMgc29udCBjZW5zw6llcyBhdm9pciBhdSBtb2lucyAxMiBwcmVsZXZlbWVudCBwYXIgYW4uCgoKYGBge3J9CnN0YXRpb24gPC0gYmluZF9yb3dzKGF1dHJlX3N0YXRpb24scmVmX3N0YXRpb24pCgphdXRyZV9zdGF0aW9uX25iIDwtIGF1dHJlX3N0YXRpb24gJT4lICBpbm5lcl9qb2luKG5iX1NUQVRJT05fYW5uZV9hbmRfcHJlbGV2ZW1lbnQsYnk9ImNvZGVfc3RhdGlvbiIpCgoKa2FibGUoc3RhdF9zdGF0aW9uX3JlZltdLCBjYXB0aW9uID0gIlN0YXRzIGTDqXNjcmlwdGl2ZSBzdXIgbGVzIHN0YXRpb25zIGRlIHLDqWbDqXJlbmNlcyIsZGlnaXRzID0gMSkgJT4lICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIpLCBmdWxsX3dpZHRoID0gRixmaXhlZF90aGVhZCA9IFQpCgoKCgprYWJsZShwcnZsdF9wYXJfYW5fcmVmX3N0YXRpb25bXSwgY2FwdGlvbiA9ICJOb21icmVzIGRlIHByZWxldmVtZW50IHBhciBhbm7DqWVzIHBvdXIgbGVzIHN0YXRpb25zIHLDqWbDqXJlbnRlcyIsZGlnaXRzID0gMSkgJT4lICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIpLCBmdWxsX3dpZHRoID0gRixmaXhlZF90aGVhZCA9IFQpCgoKbmJfTUUgPC0gYXV0cmVfc3RhdGlvbl9uYiAlPiUgZ3JvdXBfYnkoY29kZV9tYXNzZV9lYXUpICU+JSBmaWx0ZXIoY29kZV9tYXNzZV9lYXUgIT0gIk5VTEwiKSAlPiUgZGlzdGluY3QoKSAlPiUgIHN1bW1hcmlzZSggKQpuYl9NRSA8LSBhcy5kYXRhLmZyYW1lKG5yb3cobmJfTUUpKSAlPiUgIHJlbmFtZSggbmJyZV9NRSA9IGBucm93KG5iX01FKWAgKQoKc3RhdF9zdGF0aW9uX2F1dHJlIDwtIGF1dHJlX3N0YXRpb25fbmIgJT4lCiAgc3VtbWFyaXNlKE5icmVBbk1veSA9IG1lYW4obmJfYW5uZV9zdGF0aW9uKSwKICAgICAgICAgICAgTmJyZVBybHZ0TW95ID0gbWVhbihuYl9wcmVsZXZlbWVudF9zdGF0aW9uKSwKICAgICAgICAgICAgTmJyZUFuYWx5c2VNb3kgPSBtZWFuKG5iX2FuYWx5c2Vfc3RhdGlvbiksCiAgICAgICAgICAgIE5icmVQcmx2dE1veVBhckFuID0gbWVhbihuYl9tb3lfcHJldl9hbiksCiAgICAgICAgICAgIE5icmVBbmFseXNlTW95UGFyQW4gPSBtZWFuKG5iX21veV9hbmFsX2FuKSkKc3RhdF9zdGF0aW9uX2F1dHJlIDwtIGJpbmRfY29scyhzdGF0X3N0YXRpb25fYXV0cmUsbmJfTUUpCgprYWJsZShzdGF0X3N0YXRpb25fYXV0cmVbXSwgY2FwdGlvbiA9ICJTdGF0cyBkw6lzY3JpcHRpdmUgc3VyIGxlcyBhdXRyZXMgc3RhdGlvbnMgIixkaWdpdHMgPSAxKSAlPiUgIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIiksIGZ1bGxfd2lkdGggPSBGLGZpeGVkX3RoZWFkID0gVCkKCgpjYXJ0ZV9jaGFsZXVyX3JlZiA8LSByZWZfYW5hbHlzZV90b3QgJT4lIGxlZnRfam9pbihyZWZfcHJlbGV2ZW1lbnQsYnk9ImNvZGVfcHJlbGV2ZW1lbnQiKSAlPiUgCiAgbGVmdF9qb2luKHJlZl9zdGF0aW9uLGJ5PSJjb2RlX3N0YXRpb24iKSAlPiUKICBtdXRhdGUoYW5uZWUgPSB5ZWFyKGRhdGVfcHJlbGV2ZW1lbnQpLCBtb2lzID0gbW9udGgoZGF0ZV9wcmVsZXZlbWVudCkpICU+JSAKICBncm91cF9ieShhbm5lZSxtb2lzKSAlPiUgCiAgc2VsZWN0KGNvZGVfc3RhdGlvbixkYXRlX3ByZWxldmVtZW50LGFubmVlKSAlPiUKICBkaXN0aW5jdCgpICU+JSBjb3VudChuYW1lPSJuYl9wcmx2dCIpICAKICAjZ3JvdXBfYnkoYW5uZWUsbW9pcykgJT4lIAogICNtdXRhdGUobmJfcHJsdnQgPSBtZWFuKG5iX3BybHZ0KSkgJT4lICB1bmdyb3VwKCkgIEludXRpbGUgZGUgZmFpcmUgbGEgbW95ZW5uZS4uLi4KZ2dwbG90KGNhcnRlX2NoYWxldXJfcmVmLCBhZXMoYW5uZWUsIG1vaXMsIGdyb3VwPW5iX3BybHZ0LCBjb2xvdXI9bmJfcHJsdnQpKSAgKyBnZW9tX3BvaW50KCkgKyBnZ3RpdGxlKCJDYXJ0ZSBkZSBjaGFsZXVyIGR1IG5icmUgZGUgcHJlbGV2ZW1lbnQgcG91ciBsZXMgc3RhdGlvbnMgcmVmcyIpICtzY2FsZV9jb2xvcl9ncmFkaWVudG4oY29sb3VycyA9IHJhaW5ib3coNikpCmF1dHJlX2FuYWx5c2VfdG90MiA8LSBhdXRyZV9hbmFseXNlX3RvdCAlPiUgc2VsZWN0KC1jb2RlX3N0YXRpb24pCmNhcnRlX2NoYWxldXJfbm9uX3JlZiA8LSBhdXRyZV9hbmFseXNlX3RvdDIgJT4lIHNlbGVjdCgtZGF0ZV9wcmVsZXZlbWVudCkgJT4lIGxlZnRfam9pbihhdXRyZV9wcmVsZXZlbWVudCxieT0iY29kZV9wcmVsZXZlbWVudCIpICU+JSAKICBsZWZ0X2pvaW4oYXV0cmVfc3RhdGlvbixieT0iY29kZV9zdGF0aW9uIikgJT4lCiAgbXV0YXRlKGFubmVlID0geWVhcihkYXRlX3ByZWxldmVtZW50KSwgbW9pcyA9IG1vbnRoKGRhdGVfcHJlbGV2ZW1lbnQpKSAlPiUgCiAgZ3JvdXBfYnkoYW5uZWUsbW9pcykgJT4lIAogIHNlbGVjdChjb2RlX3N0YXRpb24sZGF0ZV9wcmVsZXZlbWVudCxhbm5lZSkgJT4lCiAgZGlzdGluY3QoKSAlPiUgY291bnQobmFtZT0ibmJfcHJsdnQiKSAgCgpnZ3Bsb3QoY2FydGVfY2hhbGV1cl9ub25fcmVmLCBhZXMoYW5uZWUsIG1vaXMsIGdyb3VwPW5iX3BybHZ0LCBjb2xvdXI9bmJfcHJsdnQpKSAgKyBnZW9tX3BvaW50KCkgKyBnZ3RpdGxlKCJDYXJ0ZSBkZSBjaGFsZXVyIGR1IG5icmUgZGUgcHJlbGV2ZW1lbnQgcG91ciBsZXMgc3RhdGlvbnMgTm9uLXJlZnMiKSArc2NhbGVfY29sb3JfZ3JhZGllbnRuKGNvbG91cnMgPSByYWluYm93KDYpKQpgYGAKCgoKYGBge3J9CnN0YXRpb25fcmVmZXJlbnRlX251bCA8LSByZWZfc3RhdGlvbiAlPiUgCiAgc2VsZWN0KGNvZGVfc3RhdGlvbixsaWJlbGxlX3N0YXRpb24pICU+JSAKICBpbm5lcl9qb2luKG5iX1NUQVRJT05fYW5uZV9hbmRfcHJlbGV2ZW1lbnQpCgpzdGF0c19zdGF0aW9uMiA8LSAgc3RhdGlvbiAgJT4lCiAgbGVmdF9qb2luKG5iX1NUQVRJT05fYW5uZV9hbmRfcHJlbGV2ZW1lbnQsYnk9ImNvZGVfc3RhdGlvbiIpICU+JSAKICBmaWx0ZXIoIWlzLm5hKG5iX2FuYWx5c2Vfc3RhdGlvbikpICAlPiUgCiAgbXV0YXRlKG5iX21veV9wcmV2X2FuID0gcm91bmQobmJfbW95X3ByZXZfYW4sMCkpICU+JSAgCiAgbXV0YXRlKHN0YXRpb25fcmVmZXJlbmNlX3Blc3RpY2lkZXMgPSBpZmVsc2Uoc3RhdGlvbl9yZWZlcmVuY2VfcGVzdGljaWRlcyA9PSAiVFJVRSIsICJzdGF0aW9ucyByZWbDqXJlbnRlcyIsInN0YXRpb25zIHBhcyByZWbDqXJlbnRlcyIpKQoKZ2dwbG90KHN0YXRzX3N0YXRpb24yLCBhZXMobmJfbW95X3ByZXZfYW4sIGZpbGwgPSBzdGF0aW9uX3JlZmVyZW5jZV9wZXN0aWNpZGVzKSkgKwogIGdlb21fYmFyKCkgKyAKZ2d0aXRsZSgiTmJyZSBkZSBzdGF0aW9uIHBhciBtb3kgZGUgcHLDqWxldmVtZW50IHBhciBhbnMgIikgKwogIHlsYWIoIk5vbWJyZSBkZSBzdGF0aW9ucyIpICsKICB4bGFiKCJOb21icmUgZGUgcHLDqWxldmVtZW50IHBhciBhbiIpCmBgYAogCiMjIyBkYXRlcyBkJ2FwcGFyaXRpb25zIGRlcyBtb2zDqWN1bGVzLi4uLgoKCiMgQW5hbHlzZXMgZGVzIHBlc3RpY2lkZXMgc3VyIGxlcyBzdGF0aW9ucyByw6lmw6lyZW50ZXMgOiAKCiMjIE9uIGNvbW1lbmNlIHBhciBzZWxlY3Rpb25uZXIgbGVzIDE1IHN1YnN0YW5jZXMgbGVzIHBsdXMgcXVhbnRpZmnDqWVzIGVudHJlIDIwMDcgZXQgMjAxNyAgey50YWJzZXQgLnRhYnNldC1waWxsc30KCiMjIyAxNSBzdWJzdGFuY2VzIGxlcyBwbHVzIHF1YW50aWZpw6llcwoKCmBgYHtyfQogcmVmX1Blc3RpY2lkZV9wbHVzX2FuYWx5c2UgPC0gcmVmX1Blc3RpY2lkZV9wbHVzX2FuYWx5c2UgJT4lIGFycmFuZ2UoZGVzYyh0YXV4X3F1YW50KSkgJT4lIGxlZnRfam9pbihwYXJhbWV0cmUgJT4lIHNlbGVjdChjb2RlX3BhcmFtZXRyZSxVc2FnZTEsZGFuZ2VyZXVzZV9wcmlvcml0YWlyZSxFdGF0Q2hpbWlxdWVPdUJpb2xvZ2lxdWUpLGJ5PSJjb2RlX3BhcmFtZXRyZSIpCiMgI3BhcmFtZXRyZSRFdGF0Q2hpbWlxdWVPdUJpb2xvZ2lxdWUKIyBnZ3Bsb3QocmVmX1Blc3RpY2lkZV9wbHVzX2FuYWx5c2UsYWVzKG5vbV9wYXJhbWV0cmUsdGF1eF9xdWFudCkpICsKIyBnZ3RpdGxlKCJUb3AgMTUgcGVzdGljaWRlcyBsZXMgKyBxdWFudGlmacOpcyIpICsKIyAgIHlsYWIoIlRhdXggZGUgcXVhbnRpZmljYXRpb24iKSArCiMgICB4bGFiKCJOb20gZGUgbGEgc3Vic3RhbmNlIikgKwojICAgICAgICAgZ2VvbV9jb2wobmEucm09VFJVRSkgKyAKIyAgIHRoZW1lKGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChmYWNlPSJib2xkIiwgY29sb3VyPSIjOTkwMDAwIiwgc2l6ZT0yMCksCiMgICAgICAgICAgICBheGlzLnRleHQueCAgPSBlbGVtZW50X3RleHQoYW5nbGU9OTAsIHZqdXN0PTAuNSwgc2l6ZT0xNikpCiNGX3BhcmFtZXRyZSRJbnRlcmRpY3Rpb24KcmVmX1Blc3RpY2lkZV9wbHVzX2FuYWx5c2UgPC0gcmVmX1Blc3RpY2lkZV9wbHVzX2FuYWx5c2UgJT4lIGxlZnRfam9pbihGX3BhcmFtZXRyZSAlPiUgc2VsZWN0KGNvZGVfcGFyYW1ldHJlLEludGVyZGljdGlvbiksYnk9ImNvZGVfcGFyYW1ldHJlIikKZ2dwbG90KHJlZl9QZXN0aWNpZGVfcGx1c19hbmFseXNlKSArCiBhZXMoeCA9IG5vbV9wYXJhbWV0cmUsIGZpbGwgPSBJbnRlcmRpY3Rpb24sIHdlaWdodCA9IHRhdXhfcXVhbnQpICsKIGdlb21fYmFyKCkgKwogc2NhbGVfZmlsbF9odWUoKSArCiBsYWJzKHRpdGxlID0gIlRvcCAxNSBkZXMgc3Vic3RhbmNlcyBsZXMgKwogcXVhbnRpZmnDqXMiKSArCiB0aGVtZV9taW5pbWFsKCkgKwogICAgdGhlbWUoYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KGZhY2U9ImJvbGQiLCBjb2xvdXI9IiM5OTAwMDAiLCBzaXplPTIwKSwKICAgICAgICAgICBheGlzLnRleHQueCAgPSBlbGVtZW50X3RleHQoYW5nbGU9OTAsIHZqdXN0PTAuNSwgc2l6ZT0xNikpCgpgYGAKCiMjIyBUYXV4IGRlIHF1YW50aWZpY2F0aW9uCgpgYGB7cn0KcmVmX1Blc3RpY2lkZV9wbHVzX2FuYWx5c2V0b3RhbF9wYXJfYW5uZWUkYW5uZWUgPC0gYXMuZmFjdG9yKHJlZl9QZXN0aWNpZGVfcGx1c19hbmFseXNldG90YWxfcGFyX2FubmVlJGFubmVlKQpyZWZfUGVzdGljaWRlX3BsdXNfYW5hbHlzZXRvdGFsX3Bhcl9hbm5lZSAlPiUKICNmaWx0ZXIoUDkwX21vbnRoID49IDAgJiBQOTBfbW9udGggPD0gMi45NSkgJT4lCiBnZ3Bsb3QoKSArCiBhZXMoeCA9IGFubmVlLCB5ID0gdGF1eF9xdWFudCwgY29sb3VyID0gbm9tX3BhcmFtZXRyZSwgZ3JvdXAgPSBub21fcGFyYW1ldHJlKSArCiBnZW9tX2xpbmUoc2l6ZSA9IDFMKSArCiBzY2FsZV9jb2xvcl9odWUoKSArCiBsYWJzKHggPSAiQW5uw6llIiwgeSA9ICJUYXV4IGRlIHF1YW50aWZpY2F0aW9uIiwgdGl0bGUgPSAiUXVhbnRpZmljYXRpb24gc2Vsb24gbGVzIGFubsOpZXMiLCBzdWJ0aXRsZSA9ICJUb3AgMTUgc3Vic3RhbmNlcyIpICsKIHRoZW1lX21pbmltYWwoKQoKCiMgcmVmX1Blc3RpY2lkZV9wbHVzX2FuYWx5c2VfY2hhcV9hbiAlPiUKIyAgI2ZpbHRlcihQOTBfbW9udGggPj0gMCAmIFA5MF9tb250aCA8PSAyLjk1KSAlPiUKIyAgZ2dwbG90KCkgKwojICBhZXMoeCA9IGFubmVlLCB5ID0gdGF1eF9xdWFudCwgY29sb3VyID0gbm9tX3BhcmFtZXRyZSwgZ3JvdXAgPSBub21fcGFyYW1ldHJlKSArCiMgIGdlb21fbGluZShzaXplID0gMUwpICsKIyAgc2NhbGVfY29sb3JfaHVlKCkgKwojICBsYWJzKHggPSAiQW5uw6llIiwgeSA9ICJUYXV4IGRlIHF1YW50aWZpY2F0aW9uIiwgdGl0bGUgPSAiUXVhbnRpZmljYXRpb24gc2Vsb24gbGVzIGFubsOpZXMiLCBzdWJ0aXRsZSA9ICJUb3AgMjAgc3Vic3RhbmNlcyIpICsKIyAgdGhlbWVfbWluaW1hbCgpCgpgYGAKCiMjIyBRdWFudGlmaWNhdGlvbiBzZWxvbiBsZXMgYW5uw6llcyA6CgpgYGB7cn0KcmVmX25iX2FuYWx5c2VfUGVzdGljaWRlX3BsdXNfYW5hbHlzZV9wYXJfYW5uZWUkYW5uZWUgPC0gYXMuZmFjdG9yKHJlZl9uYl9hbmFseXNlX1Blc3RpY2lkZV9wbHVzX2FuYWx5c2VfcGFyX2FubmVlJGFubmVlKQpyZWZfbmJfYW5hbHlzZV9QZXN0aWNpZGVfcGx1c19hbmFseXNlX3Bhcl9hbm5lZSAlPiUKICNmaWx0ZXIoUDkwX21vbnRoID49IDAgJiBQOTBfbW9udGggPD0gMi45NSkgJT4lCiBnZ3Bsb3QoKSArCiBhZXMoeCA9IGFubmVlLCB5ID0gbmJfYW5hbHlzZSwgY29sb3VyID0gbm9tX3BhcmFtZXRyZSwgZ3JvdXAgPSBub21fcGFyYW1ldHJlKSArCiBnZW9tX2xpbmUoc2l6ZSA9IDFMKSArCiBzY2FsZV9jb2xvcl9odWUoKSArCiBsYWJzKHggPSAiQW5uw6llIiwgeSA9ICJOb21icmVzIGRlIHF1YW50aWZpY2F0aW9ucyIsIHRpdGxlID0gIk5vbWJyZXMgZGUgcXVhbnRpZmljYXRpb24gc2Vsb24gbGVzIGFubsOpZXMiLCBzdWJ0aXRsZSA9ICJUb3AgMTUgc3Vic3RhbmNlcyIpICsKIHRoZW1lX21pbmltYWwoKQoKCmBgYAoKIyMjIE5vbWJyZXMgZGUgcHJlbGV2ZW1lbnQgc3Vww6lyaWV1ciDDoCAwIDoKCmBgYHtyfQoKcmVmX25iX2FuYWx5c2VfcGFyX3F0aXRlX3Jlc3VsdGF0JGFubmVlIDwtIGFzLmZhY3RvcihyZWZfbmJfYW5hbHlzZV9wYXJfcXRpdGVfcmVzdWx0YXQkYW5uZWUpCnJlZl9uYl9hbmFseXNlX3Bhcl9xdGl0ZV9yZXN1bHRhdCAlPiUgCiAjZmlsdGVyKFA5MF9tb250aCA+PSAwICYgUDkwX21vbnRoIDw9IDIuOTUpICU+JQogZ2dwbG90KCkgKwogYWVzKHggPSBhbm5lZSwgeSA9IG5iX2FuYWx5c2UsIGNvbG91ciA9IHF1YW50aXRlX2FuYWx5c2UsIGdyb3VwID0gcXVhbnRpdGVfYW5hbHlzZSkgKwogZ2VvbV9saW5lKHNpemUgPSAxTCkgKwogc2NhbGVfY29sb3JfaHVlKCkgKwogbGFicyh4ID0gIkFubsOpZSIsIHkgPSAiTm9tYnJlcyBkZSBxdWFudGlmaWNhdGlvbnMiLCB0aXRsZSA9ICJOb21icmVzIGRlIHF1YW50aWZpY2F0aW9uIHNlbG9uIGxlcyBhbm7DqWVzIiwgc3VidGl0bGUgPSAiVG9wIDE1IHN1YnN0YW5jZXMiKSArCiB0aGVtZV9taW5pbWFsKCkKYGBgCgojIyB7LX0KCiMjIFBhc3NvbnMgYXV4IHBlc3RpY2lkZXMgZMOpZmluaXQgY29tbWUgcHJpb3JpdGFpcmUgb3UgZGFuZ2VyZXV4IHBhciBsJ0FycsOqdMOpIGR1IDA3LzA5LzE1IDogey50YWJzZXQgLnRhYnNldC1waWxsc30KCgojIyMgUXVhbnRpZmljYXRpb24gc2Vsb24gbGVzIGFubsOpZXMgOgoKYGBge3J9CnJlZl9uYl9hbmFseXNlX1Blc3RpY2lkZV9EYW5nUHJpb19wYXJfYW5uZWUkYW5uZWUgPC0gYXMuZmFjdG9yKHJlZl9uYl9hbmFseXNlX1Blc3RpY2lkZV9EYW5nUHJpb19wYXJfYW5uZWUkYW5uZWUpCnJlZl9uYl9hbmFseXNlX1Blc3RpY2lkZV9EYW5nUHJpb19wYXJfYW5uZWUgJT4lCiAjZmlsdGVyKFA5MF9tb250aCA+PSAwICYgUDkwX21vbnRoIDw9IDIuOTUpICU+JQogZ2dwbG90KCkgKwogYWVzKHggPSBhbm5lZSwgeSA9IG5iX2FuYWx5c2UsIGNvbG91ciA9IG5vbV9wYXJhbWV0cmUsIGdyb3VwID0gbm9tX3BhcmFtZXRyZSkgKwogZ2VvbV9saW5lKHNpemUgPSAxTCkgKwogc2NhbGVfY29sb3JfaHVlKCkgKwogbGFicyh4ID0gIkFubsOpZSIsIHkgPSAiTm9tYnJlcyBkZSBxdWFudGlmaWNhdGlvbnMiLCB0aXRsZSA9ICJOb21icmVzIGRlIHF1YW50aWZpY2F0aW9uIHNlbG9uIGxlcyBhbm7DqWVzIiwgc3VidGl0bGUgPSAiU3Vic3RhbmNlIHByaW8gb3UgZGFuZ2VyZXVzZXMiKSArCiB0aGVtZV9taW5pbWFsKCkKCgpgYGAKCiMjIyBOb21icmVzIGRlIHByZWxldmVtZW50IHN1cMOpcmlldXIgw6AgMCA6CgpgYGB7cn0KCnJlZl9uYl9hbmFseXNlX1Blc3RpY2lkZV9EYW5nUHJpb19wYXJfcXRpdGVfcmVzdWx0YXQkYW5uZWUgPC0gYXMuZmFjdG9yKHJlZl9uYl9hbmFseXNlX1Blc3RpY2lkZV9EYW5nUHJpb19wYXJfcXRpdGVfcmVzdWx0YXQkYW5uZWUpCnJlZl9uYl9hbmFseXNlX1Blc3RpY2lkZV9EYW5nUHJpb19wYXJfcXRpdGVfcmVzdWx0YXQgJT4lIAogI2ZpbHRlcihQOTBfbW9udGggPj0gMCAmIFA5MF9tb250aCA8PSAyLjk1KSAlPiUKIGdncGxvdCgpICsKIGFlcyh4ID0gYW5uZWUsIHkgPSBuYl9hbmFseXNlLCBjb2xvdXIgPSBxdWFudGl0ZV9hbmFseXNlLCBncm91cCA9IHF1YW50aXRlX2FuYWx5c2UpICsKIGdlb21fbGluZShzaXplID0gMUwpICsKIHNjYWxlX2NvbG9yX2h1ZSgpICsKIGxhYnMoeCA9ICJBbm7DqWUiLCB5ID0gIk5vbWJyZXMgZGUgcXVhbnRpZmljYXRpb25zIiwgdGl0bGUgPSAiTm9tYnJlcyBkZSBxdWFudGlmaWNhdGlvbiBzZWxvbiBsZXMgYW5uw6llcyIsIHN1YnRpdGxlID0gIlN1YnN0YW5jZSBwcmlvIG91IGRhbmdlcmV1c2VzIikgKwogdGhlbWVfbWluaW1hbCgpCmBgYAoKIyMgey19CgojIEFuYWx5c2VzIGRlcyBwZXN0aWNpZGVzIHN1ciBsZXMgYXV0cmVzIHN0YXRpb25zIDogCgojIyBBbmFseXNlcyBkZXMgcGVzdGljaWRlcyBzdXIgbGVzIGF1dHJlcyBzdGF0aW9ucyBhdmVjIGxlcyAxNSBzdWJzdGFuY2VzIGxlcyBwbHVzIHF1YW50aWZpw6llcyAgey50YWJzZXQgLnRhYnNldC1waWxsc30KCjwhLS0gLCBwdWlzIGxldXJzIHRhdXggcGFyIGFubsOpZS4gLS0+CgojIyMgMTUgc3Vic3RhbmNlcyBsZXMgcGx1cyBxdWFudGlmacOpZXMKCmBgYHtyfQogYXV0cmVfUGVzdGljaWRlX3BsdXNfYW5hbHlzZSA8LSBhdXRyZV9QZXN0aWNpZGVfcGx1c19hbmFseXNlICU+JSBhcnJhbmdlKGRlc2ModGF1eF9xdWFudCkpICU+JSBsZWZ0X2pvaW4ocGFyYW1ldHJlICU+JSBzZWxlY3QoY29kZV9wYXJhbWV0cmUsVXNhZ2UxLGRhbmdlcmV1c2VfcHJpb3JpdGFpcmUsRXRhdENoaW1pcXVlT3VCaW9sb2dpcXVlKSxieT0iY29kZV9wYXJhbWV0cmUiKQoKZ2dwbG90KGF1dHJlX1Blc3RpY2lkZV9wbHVzX2FuYWx5c2UpICsKIGFlcyh4ID0gbm9tX3BhcmFtZXRyZSwgZmlsbCA9IEV0YXRDaGltaXF1ZU91QmlvbG9naXF1ZSwgd2VpZ2h0ID0gdGF1eF9xdWFudCkgKwogZ2VvbV9iYXIoKSArCiBzY2FsZV9maWxsX2h1ZSgpICsKIGxhYnModGl0bGUgPSAiVG9wIDE1IGRlcyBzdWJzdGFuY2VzIGxlcyArCiBxdWFudGlmacOpcyIpICsKIHRoZW1lX21pbmltYWwoKSArCiAgICB0aGVtZShheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoZmFjZT0iYm9sZCIsIGNvbG91cj0iIzk5MDAwMCIsIHNpemU9MjApLAogICAgICAgICAgIGF4aXMudGV4dC54ICA9IGVsZW1lbnRfdGV4dChhbmdsZT05MCwgdmp1c3Q9MC41LCBzaXplPTE2KSkKCmBgYAoKIyMjIFRhdXggZGUgcXVhbnRpZmljYXRpb24KCmBgYHtyfQoKYXV0cmVfUGVzdGljaWRlX3BsdXNfYW5hbHlzZXRvdGFsX3Bhcl9hbm5lZSRhbm5lZSA8LSBhcy5mYWN0b3IoYXV0cmVfUGVzdGljaWRlX3BsdXNfYW5hbHlzZXRvdGFsX3Bhcl9hbm5lZSRhbm5lZSkKYXV0cmVfUGVzdGljaWRlX3BsdXNfYW5hbHlzZXRvdGFsX3Bhcl9hbm5lZSAlPiUKIGdncGxvdCgpICsKIGFlcyh4ID0gYW5uZWUsIHkgPSB0YXV4X3F1YW50LCBjb2xvdXIgPSBub21fcGFyYW1ldHJlLCBncm91cCA9IG5vbV9wYXJhbWV0cmUpICsKIGdlb21fbGluZShzaXplID0gMUwpICsKIHNjYWxlX2NvbG9yX2h1ZSgpICsKIGxhYnMoeCA9ICJBbm7DqWUiLCB5ID0gIlRhdXggZGUgcXVhbnRpZmljYXRpb24iLCB0aXRsZSA9ICJRdWFudGlmaWNhdGlvbiBzZWxvbiBsZXMgYW5uw6llcyIsIHN1YnRpdGxlID0gIlRvcCAxNSBzdWJzdGFuY2VzIikgKwogdGhlbWVfbWluaW1hbCgpCgpgYGAKCiMjIyBRdWFudGlmaWNhdGlvbiBzZWxvbiBsZXMgYW5uw6llcyA6CgpgYGB7cn0KYXV0cmVfbmJfYW5hbHlzZV9QZXN0aWNpZGVfcGx1c19hbmFseXNlX3Bhcl9hbm5lZSRhbm5lZSA8LSBhcy5mYWN0b3IoYXV0cmVfbmJfYW5hbHlzZV9QZXN0aWNpZGVfcGx1c19hbmFseXNlX3Bhcl9hbm5lZSRhbm5lZSkKYXV0cmVfbmJfYW5hbHlzZV9QZXN0aWNpZGVfcGx1c19hbmFseXNlX3Bhcl9hbm5lZSAlPiUKICNmaWx0ZXIoUDkwX21vbnRoID49IDAgJiBQOTBfbW9udGggPD0gMi45NSkgJT4lCiBnZ3Bsb3QoKSArCiBhZXMoeCA9IGFubmVlLCB5ID0gbmJfYW5hbHlzZSwgY29sb3VyID0gbm9tX3BhcmFtZXRyZSwgZ3JvdXAgPSBub21fcGFyYW1ldHJlKSArCiBnZW9tX2xpbmUoc2l6ZSA9IDFMKSArCiBzY2FsZV9jb2xvcl9odWUoKSArCiBsYWJzKHggPSAiQW5uw6llIiwgeSA9ICJOb21icmVzIGRlIHF1YW50aWZpY2F0aW9ucyIsIHRpdGxlID0gIk5vbWJyZXMgZGUgcXVhbnRpZmljYXRpb24gc2Vsb24gbGVzIGFubsOpZXMiLCBzdWJ0aXRsZSA9ICJUb3AgMTUgc3Vic3RhbmNlcyIpICsKIHRoZW1lX21pbmltYWwoKQoKCmBgYAoKIyMjIE5vbWJyZXMgZGUgcHJlbGV2ZW1lbnQgc3Vww6lyaWV1ciDDoCAwIDoKCmBgYHtyfQoKYXV0cmVfbmJfYW5hbHlzZV9wYXJfcXRpdGVfcmVzdWx0YXQkYW5uZWUgPC0gYXMuZmFjdG9yKGF1dHJlX25iX2FuYWx5c2VfcGFyX3F0aXRlX3Jlc3VsdGF0JGFubmVlKQphdXRyZV9uYl9hbmFseXNlX3Bhcl9xdGl0ZV9yZXN1bHRhdCAlPiUgCiAjZmlsdGVyKFA5MF9tb250aCA+PSAwICYgUDkwX21vbnRoIDw9IDIuOTUpICU+JQogZ2dwbG90KCkgKwogYWVzKHggPSBhbm5lZSwgeSA9IG5iX2FuYWx5c2UsIGNvbG91ciA9IHF1YW50aXRlX2FuYWx5c2UsIGdyb3VwID0gcXVhbnRpdGVfYW5hbHlzZSkgKwogZ2VvbV9saW5lKHNpemUgPSAxTCkgKwogc2NhbGVfY29sb3JfaHVlKCkgKwogbGFicyh4ID0gIkFubsOpZSIsIHkgPSAiTm9tYnJlcyBkZSBxdWFudGlmaWNhdGlvbnMiLCB0aXRsZSA9ICJOb21icmVzIGRlIHF1YW50aWZpY2F0aW9uIHNlbG9uIGxlcyBhbm7DqWVzIiwgc3VidGl0bGUgPSAiVG9wIDE1IHN1YnN0YW5jZXMiKSArCiB0aGVtZV9taW5pbWFsKCkKYGBgCgojIyB7LX0KCgojIyBQYXNzb25zIGF1eCBwZXN0aWNpZGVzIGTDqWZpbml0IGNvbW1lIHByaW9yaXRhaXJlIG91IGRhbmdlcmV1eCBwYXIgbCdBcnLDqnTDqSBkdSAwNy8wOS8xNSA6IHsudGFic2V0IC50YWJzZXQtcGlsbHN9CgoKIyMjIFF1YW50aWZpY2F0aW9uIHNlbG9uIGxlcyBhbm7DqWVzIDoKCmBgYHtyfQphdXRyZV9uYl9hbmFseXNlX1Blc3RpY2lkZV9EYW5nUHJpb19wYXJfYW5uZWUkYW5uZWUgPC0gYXMuZmFjdG9yKGF1dHJlX25iX2FuYWx5c2VfUGVzdGljaWRlX0RhbmdQcmlvX3Bhcl9hbm5lZSRhbm5lZSkKYXV0cmVfbmJfYW5hbHlzZV9QZXN0aWNpZGVfRGFuZ1ByaW9fcGFyX2FubmVlICU+JQogI2ZpbHRlcihQOTBfbW9udGggPj0gMCAmIFA5MF9tb250aCA8PSAyLjk1KSAlPiUKIGdncGxvdCgpICsKIGFlcyh4ID0gYW5uZWUsIHkgPSBuYl9hbmFseXNlLCBjb2xvdXIgPSBub21fcGFyYW1ldHJlLCBncm91cCA9IG5vbV9wYXJhbWV0cmUpICsKIGdlb21fbGluZShzaXplID0gMUwpICsKIHNjYWxlX2NvbG9yX2h1ZSgpICsKIGxhYnMoeCA9ICJBbm7DqWUiLCB5ID0gIk5vbWJyZXMgZGUgcXVhbnRpZmljYXRpb25zIiwgdGl0bGUgPSAiTm9tYnJlcyBkZSBxdWFudGlmaWNhdGlvbiBzZWxvbiBsZXMgYW5uw6llcyIsIHN1YnRpdGxlID0gIlN1YnN0YW5jZSBwcmlvIG91IGRhbmdlcmV1c2VzIikgKwogdGhlbWVfbWluaW1hbCgpCgpgYGAKCiMjIyBOb21icmVzIGRlIHByZWxldmVtZW50IHN1cMOpcmlldXIgw6AgMCA6CgpgYGB7cn0KCmF1dHJlX25iX2FuYWx5c2VfUGVzdGljaWRlX0RhbmdQcmlvX3Bhcl9xdGl0ZV9yZXN1bHRhdCRhbm5lZSA8LSBhcy5mYWN0b3IoYXV0cmVfbmJfYW5hbHlzZV9QZXN0aWNpZGVfRGFuZ1ByaW9fcGFyX3F0aXRlX3Jlc3VsdGF0JGFubmVlKQphdXRyZV9uYl9hbmFseXNlX1Blc3RpY2lkZV9EYW5nUHJpb19wYXJfcXRpdGVfcmVzdWx0YXQgJT4lIAogI2ZpbHRlcihQOTBfbW9udGggPj0gMCAmIFA5MF9tb250aCA8PSAyLjk1KSAlPiUKIGdncGxvdCgpICsKIGFlcyh4ID0gYW5uZWUsIHkgPSBuYl9hbmFseXNlLCBjb2xvdXIgPSBxdWFudGl0ZV9hbmFseXNlLCBncm91cCA9IHF1YW50aXRlX2FuYWx5c2UpICsKIGdlb21fbGluZShzaXplID0gMUwpICsKIHNjYWxlX2NvbG9yX2h1ZSgpICsKIGxhYnMoeCA9ICJBbm7DqWUiLCB5ID0gIk5vbWJyZXMgZGUgcXVhbnRpZmljYXRpb25zIiwgdGl0bGUgPSAiTm9tYnJlcyBkZSBxdWFudGlmaWNhdGlvbiBzZWxvbiBsZXMgYW5uw6llcyIsIHN1YnRpdGxlID0gIlN1YnN0YW5jZSBwcmlvIG91IGRhbmdlcmV1c2VzIikgKwogdGhlbWVfbWluaW1hbCgpCmBgYAoKIyMgey19CgojIyBEZXNjcmlwdGl2ZSBTdGF0aW9ucyBSRUZTIDogey50YWJzZXQgLnRhYnNldC1waWxsc30KCiMjIyBNb3kgTWVuc3VlbGxlIGRlIGNoYXF1ZSBwZXN0aWNpZGVzIDogCgpgYGB7cn0KCm1veV9tZW5zIDwtIE1veV9tb2lzX2Vuc2VtYmxlX1N0YXRpb24odGFibGVfc3RhdGlvbiA9IHJlZl9zdGF0aW9uLHRhYmxlX3ByZWxldmVtZW50ID0gcmVmX3ByZWxldmVtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2FuYWx5c2UgPSByZWZfYW5hbHlzZSkgJT4lIGZpbHRlcighaXMubmEoY29kZV9wYXJhbWV0cmUpKSAlPiUgCiAgbGVmdF9qb2luKHJlZl9wYXJhbWV0cmUgJT4lIAogICAgICAgICAgICAgIHNlbGVjdChjb2RlX3BhcmFtZXRyZSxub21fcGFyYW1ldHJlKSxieT0iY29kZV9wYXJhbWV0cmUiKSU+JQogIGZpbHRlcighaXMubmEobm9tX3BhcmFtZXRyZSkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNlbGVjdCgtY29kZV9wYXJhbWV0cmUpICMlPiUgCgptb3lfbWVucyAlPiUKIGZpbHRlcihtZWFuX21vbnRoID49IDAgJiBtZWFuX21vbnRoIDw9IDIuOTUpICU+JQogZ2dwbG90KCkgKwogYWVzKHggPSBkYXRlLCB5ID0gbWVhbl9tb250aCwgY29sb3VyID0gbm9tX3BhcmFtZXRyZSwgZ3JvdXAgPSBub21fcGFyYW1ldHJlKSArCiBnZW9tX2xpbmUoc2l6ZSA9IDFMKSArCiBzY2FsZV9jb2xvcl9odWUoKSArCiBsYWJzKHggPSAiRGF0ZSIsIHkgPSAiTW95ZW5uZXMgbWVuc3VlbGxlcyIsIHRpdGxlID0gIk1veWVubmUgc3VyIHN0YXRpb25zIHJlZsOpcmVudGVzIiwgc3VidGl0bGUgPSAiVG9wIDE1IHN1YnN0YW5jZXMiKSArCiB0aGVtZV9taW5pbWFsKCkKCmBgYAoKIyMjIE1veSBNZW5zdWVsbGUgKyBQOTAgZGUgY2hhcXVlIHBlc3RpY2lkZXMgc2VwYXLDqXM6IAoKCmBgYHtyfQpzdGF0ZV9wbG90cyA8LSBwYXN0ZTAobGlzdC5maWxlcygicGxvdHMvcGFyYW1fc3RhdGlvbl9yZWZfTW95X21vbnRoIiwgZnVsbC5uYW1lcyA9IFRSVUUpKQpuYW1lcyhzdGF0ZV9wbG90cykgPC0gc3RyX3JlcGxhY2VfYWxsKHN0YXRlX3Bsb3RzLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjKCJcXC5wbmciID0gIiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBsb3RzL3BhcmFtX3N0YXRpb25fcmVmX01veV9tb250aCIgPSAiIikpCgpic3NlbGVjdChzdGF0ZV9wbG90cywgdHlwZSA9ICJpbWciLCBzZWxlY3RlZCA9ICIyLWh5ZHJveHkgYXRyYXppbmUiLCAKICAgICAgICAgbGl2ZV9zZWFyY2ggPSBUUlVFLCBzaG93X3RpY2sgPSBUUlVFKQoKYGBgCgo8IS0tICMjIyBMZSBQOTAgOiAgLS0+Cgo8IS0tIGBgYHtyfSAtLT4KCjwhLS0gUDkwX21lbnMgJT4lIC0tPgo8IS0tICBmaWx0ZXIoUDkwX21vbnRoID49IDAgJiBQOTBfbW9udGggPD0gMi45NSkgJT4lIC0tPgo8IS0tICBnZ3Bsb3QoKSArIC0tPgo8IS0tICBhZXMoeCA9IGRhdGUsIHkgPSBQOTBfbW9udGgsIGNvbG91ciA9IG5vbV9wYXJhbWV0cmUsIGdyb3VwID0gbm9tX3BhcmFtZXRyZSkgKyAtLT4KPCEtLSAgZ2VvbV9saW5lKHNpemUgPSAxTCkgKyAtLT4KPCEtLSAgc2NhbGVfY29sb3JfaHVlKCkgKyAtLT4KPCEtLSAgbGFicyh4ID0gIkRhdGUiLCB5ID0gIlA5MCBtZW5zdWVsbGVzIiwgdGl0bGUgPSAiUDkwIHN1ciBzdGF0aW9ucyByZWbDqXJlbnRlcyIsIHN1YnRpdGxlID0gIlRvcCAxNSBzdWJzdGFuY2VzIikgKyAtLT4KPCEtLSAgdGhlbWVfbWluaW1hbCgpIC0tPgo8IS0tIGBgYCAtLT4KCiMjIyBDdW11bCBwYXIgbW9pcyBkZXMgcHJpbmNpcGFsZXMgc3Vic3RhbmNlcyA6OgoKYGBge3J9CmN1bXVsX3RvcDIwIDwtIHJlZl9hbmFseXNlICU+JSAKICBsZWZ0X2pvaW4ocHJlbGV2ZW1lbnQgJT4lIHNlbGVjdChjb2RlX3ByZWxldmVtZW50LGRhdGVfcHJlbGV2ZW1lbnQpLGJ5PSJjb2RlX3ByZWxldmVtZW50IikgJT4lIAogIGlubmVyX2pvaW4ocmVmX3BhcmFtZXRyZSxieT0iY29kZV9wYXJhbWV0cmUiKSAlPiUgCiAgbXV0YXRlKGFubmVlPXllYXIoZGF0ZV9wcmVsZXZlbWVudCksbW9udGg9bW9udGgoZGF0ZV9wcmVsZXZlbWVudCkpICU+JSAKICBncm91cF9ieShhbm5lZSxtb250aCkgJT4lIAogIG11dGF0ZShjdW11bF9tb2lzID0gc3VtKHJlc3VsdGF0X2FuYWx5c2UpKSAlPiUgCiAgc2VsZWN0KGFubmVlLG1vbnRoLGN1bXVsX21vaXMsZGF0ZV9wcmVsZXZlbWVudCkgJT4lIAogIGRpc3RpbmN0KCkKCgpjdW11bF90b3AyMF9hbmFsIDwtIHJlZl9hbmFseXNlICU+JSAKICAgbGVmdF9qb2luKHByZWxldmVtZW50ICU+JSBzZWxlY3QoY29kZV9wcmVsZXZlbWVudCxkYXRlX3ByZWxldmVtZW50KSxieT0iY29kZV9wcmVsZXZlbWVudCIpICU+JSAKICBpbm5lcl9qb2luKHJlZl9wYXJhbWV0cmUsYnk9ImNvZGVfcGFyYW1ldHJlIikgJT4lIAogIG11dGF0ZShhbm5lZT15ZWFyKGRhdGVfcHJlbGV2ZW1lbnQpLG1vbnRoPW1vbnRoKGRhdGVfcHJlbGV2ZW1lbnQpKSAlPiUgCiAgZ3JvdXBfYnkoYW5uZWUsbW9udGgpICU+JSAKICBjb3VudChuYW1lID0gIm5iX2FuYWx5c2UiKSAlPiUgCiAgI3NlbGVjdChhbm5lZSxtb250aCxuYl9hbmFseXNlLGRhdGVfcHJlbGV2ZW1lbnQpICU+JSAKICBkaXN0aW5jdCgpCgpjdW11bF90b3AyMCA8LSBjdW11bF90b3AyMCAlPiUgbGVmdF9qb2luKGN1bXVsX3RvcDIwX2FuYWwsYnk9YygiYW5uZWUiLCJtb250aCIpKQoKcmVtb3ZlKGN1bXVsX3RvcDIwX2FuYWwpCgpjdW11bF90b3AyMCAlPiUKIGdncGxvdCgpICsKIGFlcyh4ID0gZGF0ZV9wcmVsZXZlbWVudCkrICAgICAgICMsIGNvbG91ciA9IG5vbV9wYXJhbWV0cmUsIGdyb3VwID0gbm9tX3BhcmFtZXRyZSkgKwogIGdlb21fbGluZShhZXMoeSA9IGN1bXVsX21vaXMsIGNvbG9yID0gIkN1bXVsIikpICsgCiAgZ2VvbV9saW5lKGFlcyh5ID0gbmJfYW5hbHlzZSwgY29sb3I9Ik5iX2FuYWx5c2VzIiksIGxpbmV0eXBlPSJ0d29kYXNoIikgICsKICNzY2FsZV9jb2xvcl9odWUoKSArCiAgICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiZGFya3JlZCIsICJzdGVlbGJsdWUiKSkgKwogbGFicyh4ID0gIkRhdGUiLCB5ID0gImN1bXVsIG1lbnN1ZWxsZXMiLCB0aXRsZSA9ICJDdW11bCBkZXMgc3Vic3RhbmNlcyBzdXIgbGVzIHN0YXRpb25zIHJlZnMiLCBzdWJ0aXRsZSA9ICJUb3AgMTUgc3Vic3RhbmNlcyIpICsKIHRoZW1lX21pbmltYWwoKQoKCmBgYAoKIyMjIE5vdGVzIGRlcyBzdGF0aW9ucyByw6lmw6lyZW50ZXMgOgoKYGBge3J9Cgpub3RlX3N0YXRpb24gPC0gIG5iX1NUQVRJT05fYW5uZV9hbmRfcHJlbGV2ZW1lbnQgJT4lIAogIGlubmVyX2pvaW4ocmVmX3N0YXRpb24sYnk9ImNvZGVfc3RhdGlvbiIpICU+JSAKICBtdXRhdGUobm90ZV9wcmV2ID0gaWZlbHNlKG5iX21veV9wcmV2X2FuPDMsMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKG5iX21veV9wcmV2X2FuPDYsMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShuYl9tb3lfcHJldl9hbjwxMiwyLDMpKSkpICU+JSAKICBtdXRhdGUobm90ZV9uYl9zdWJzdGFuY2UgPSAgaWZlbHNlKG5iX2FuYWx5c2VzX3JlY2hlcmNoZXM8NTAsMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShuYl9hbmFseXNlc19yZWNoZXJjaGVzPDEwMCwxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShuYl9hbmFseXNlc19yZWNoZXJjaGVzPDIwMCwyLDMpKSkpICU+JSAKICBzZWxlY3QoY29kZV9zdGF0aW9uLG5vdGVfbmJfc3Vic3RhbmNlLG5vdGVfcHJldikgJT4lIAogICAgICBtdXRhdGUobm90ZV90b3RhbF9zdGF0ID0gaWZlbHNlKG5vdGVfbmJfc3Vic3RhbmNlICsgbm90ZV9wcmV2PjQsImZvcnRlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKG5vdGVfbmJfc3Vic3RhbmNlICsgbm90ZV9wcmV2PjIsIm1veWVuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmYWlibGUiKSkpCgpEVDo6ZGF0YXRhYmxlKG5vdGVfc3RhdGlvbixjYXB0aW9uID0gIk5vdGVzIGRlcyBkaWZmw6lyZW50ZXMgc3RhdGlvbnMgcsOpZsOpcmVudGVzIikKbmJfbm90ZSA8LSBub3RlX3N0YXRpb24gJT4lIGdyb3VwX2J5KG5vdGVfdG90YWxfc3RhdCkgJT4lIAogIGNvdW50KG5hbWU9Im5iX3N0YXRpb24iKQpub3RlX3N0YXRpb24kbm90ZV90b3RhbF9zdGF0IDwtIGFzLmZhY3Rvcihub3RlX3N0YXRpb24kbm90ZV90b3RhbF9zdGF0KQpnZ3Bsb3QoZGF0YSA9IG5iX25vdGUsIGFlcyh4PW5vdGVfdG90YWxfc3RhdCkpICsKICBnZW9tX2NvbChhZXMoeT1uYl9zdGF0aW9uKSkKCmBgYAoKIyMjIE5vdGVzIGRlcyBzdWJzdGFuY2VzIHN1ciBzdGF0aW9ucyByZWbDqXJlbnRlcyA6CgpgYGB7cn0Kbm90ZV9zdWJzdGFuY2UgPC0gcmVmX3N0YXRpb24gJT4lIGxlZnRfam9pbihyZWZfcHJlbGV2ZW1lbnQsYnk9ImNvZGVfc3RhdGlvbiIpICU+JSAKICBsZWZ0X2pvaW4ocmVmX2FuYWx5c2VfdG90ICxieT0iY29kZV9wcmVsZXZlbWVudCIpICU+JSAKICBtdXRhdGUoYW5uZWUgPSB5ZWFyKGRhdGVfcHJlbGV2ZW1lbnQpKSAlPiUgCiAgc2VsZWN0KGNvZGVfcGFyYW1ldHJlLGFubmVlLGNvZGVfc3RhdGlvbikgJT4lIAogIGRpc3RpbmN0KCkgJT4lIAogIGdyb3VwX2J5KGNvZGVfcGFyYW1ldHJlLGFubmVlKSAlPiUgCiAgY291bnQobmFtZT0ibmJfc3RhdGlvbiIpIAogIApub3RlX3N1YnN0YW5jZV8yIDwtIHJlZl9zdGF0aW9uICU+JSBsZWZ0X2pvaW4ocmVmX3ByZWxldmVtZW50LGJ5PSJjb2RlX3N0YXRpb24iKSAlPiUgCiAgbGVmdF9qb2luKHJlZl9hbmFseXNlX3RvdCxieT0iY29kZV9wcmVsZXZlbWVudCIpICU+JSAKICBtdXRhdGUoYW5uZWUgPSB5ZWFyKGRhdGVfcHJlbGV2ZW1lbnQpKSAlPiUgCiAgc2VsZWN0KGNvZGVfcGFyYW1ldHJlLGFubmVlLGNvZGVfcHJlbGV2ZW1lbnQpICU+JSAKICBkaXN0aW5jdCgpICU+JSAKICBncm91cF9ieShjb2RlX3BhcmFtZXRyZSxhbm5lZSkgJT4lIAogIGNvdW50KG5hbWU9ImZycV9wcmVsZXZlbWVudCIpIAoKbm90ZV9zdWJzdGFuY2VfMyA8LSByZWZfc3RhdGlvbiAlPiUgbGVmdF9qb2luKHJlZl9wcmVsZXZlbWVudCxieT0iY29kZV9zdGF0aW9uIikgJT4lIAogIGxlZnRfam9pbihyZWZfYW5hbHlzZV90b3QsYnk9ImNvZGVfcHJlbGV2ZW1lbnQiKSAlPiUgCiAgbXV0YXRlKGFubmVlID0geWVhcihkYXRlX3ByZWxldmVtZW50KSkgJT4lIAogIHNlbGVjdChjb2RlX3BhcmFtZXRyZSxhbm5lZSkgJT4lIAogIGRpc3RpbmN0KCkgJT4lIAogIGdyb3VwX2J5KGFubmVlKSAlPiUgCiAgY291bnQobmFtZT0ibmJfc3Vic3RhbmNlIikgCgpub3RlX3N1YnN0YW5jZSA8LSBub3RlX3N1YnN0YW5jZSAlPiUgCiAgbGVmdF9qb2luKG5vdGVfc3Vic3RhbmNlXzIsYnk9YygiY29kZV9wYXJhbWV0cmUiLCJhbm5lZSIpKSAlPiUgCiAgaW5uZXJfam9pbihwYXJhbWV0cmUsYnk9ImNvZGVfcGFyYW1ldHJlIikgJT4lIAogIG11dGF0ZShub3RlX3N0YXRpb24gPSBpZmVsc2UobmJfc3RhdGlvbjwyMCwwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UobmJfc3RhdGlvbjw1MCwxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKG5iX3N0YXRpb248MTAwLDIsMykpKSkgJT4lIAogIG11dGF0ZShmcnFfcHJ2bHQgPSBmcnFfcHJlbGV2ZW1lbnQvbmJfc3RhdGlvbikgJT4lIAogIG11dGF0ZShub3RlX2ZycSA9IGlmZWxzZShmcnFfcHJ2bHQ8MiwwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoZnJxX3Bydmx0PDYsMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShmcnFfcHJ2bHQ8MTAsMiwzKSkpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzZWxlY3QoY29kZV9wYXJhbWV0cmUsbm90ZV9zdGF0aW9uLG5vdGVfZnJxLGFubmVlKSAlPiUgCiAgbXV0YXRlKG5vdGVfdG90YWxfc3Vic3RhbmNlID0gaWZlbHNlKG5vdGVfc3RhdGlvbiArIG5vdGVfZnJxPjQsImZvcnRlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKG5vdGVfc3RhdGlvbiArIG5vdGVfZnJxPjIsIm1veWVuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmYWlibGUiKSkpICU+JSAKICBsZWZ0X2pvaW4obm90ZV9zdWJzdGFuY2VfMyxieT0iYW5uZWUiKSAKCnJlbW92ZShub3RlX3N1YnN0YW5jZV8yKQoKRFQ6OmRhdGF0YWJsZShub3RlX3N1YnN0YW5jZSxjYXB0aW9uID0gIk5vdGVzIGRlcyBkaWZmw6lyZW50ZXMgc3Vic3RhbmNlcyBzdXIgc3RhdGlvbnMgcsOpZsOpcmVudGVzIikKCgpub3RlX3N1YnN0YW5jZSRub3RlX3RvdGFsX3N1YnN0YW5jZSA8LSBhcy5mYWN0b3Iobm90ZV9zdWJzdGFuY2Ukbm90ZV90b3RhbF9zdWJzdGFuY2UpCiMgZ2dwbG90KGRhdGE9bm90ZV9zdWJzdGFuY2UsIGFlcyhhbm5lZSkpKwojICAgZ2VvbV9iYXIoYWVzKGZpbGw9YXMuZmFjdG9yKG5vdGVfdG90YWxfc3Vic3RhbmNlKSksIHBvc2l0aW9uPSJmaWxsIikKCiMgZ2dwbG90KGRhdGE9bm90ZV9zdWJzdGFuY2UsCiMgICAgICAgIGFlcyh4PWFubmVlLHk9KC4uY291bnQuLikvc3VtKC4uY291bnQuLiksCiMgICAgICAgICAgICBmaWxsID0gbm90ZV90b3RhbF9zdWJzdGFuY2UpKSArIAojICAgZ2VvbV9iYXIod2lkdGggPSAwLjkpICsKIyAgICBnZW9tX3RleHQoYWVzKGxhYmVsPW5iX3N1YnN0YW5jZSksIHZqdXN0PTApCgpnZ3Bsb3Qobm90ZV9zdWJzdGFuY2UsIGFlcyhhbm5lZSwgbmJfc3Vic3RhbmNlLCBmaWxsPW5vdGVfdG90YWxfc3Vic3RhbmNlKSkrCiAgICBnZW9tX2JhcihzdGF0PSJpZGVudGl0eSIpICsKICAgIGdlb21fdGV4dChhZXMobGFiZWw9bmJfc3Vic3RhbmNlKSwgdmp1c3Q9LTEyLCBzaXplPTMsIGhqdXN0PTEpCmBgYAoKQXZlYyBsZSBub21icmVzIGRlIHN1YnN0YW5jZXMgdG90YWwgcGFyIGFubsOpZS4KCiMjIHstfQoKIyMgRGVzY3JpcHRpdmUgU3RhdGlvbnMgQXV0cmVzIDogey50YWJzZXQgLnRhYnNldC1waWxsc30KCiMjIyBNb3kgTWVuc3VlbGxlIGRlIGNoYXF1ZSBwZXN0aWNpZGVzIDogCgpgYGB7cn0KbW95X21lbnMgPC0gTW95X21vaXNfZW5zZW1ibGVfU3RhdGlvbih0YWJsZV9zdGF0aW9uID0gYXV0cmVfc3RhdGlvbix0YWJsZV9wcmVsZXZlbWVudCA9IGF1dHJlX3ByZWxldmVtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2FuYWx5c2UgPSByZWZfYW5hbHlzZSkgJT4lIGZpbHRlcighaXMubmEoY29kZV9wYXJhbWV0cmUpKSAlPiUgCiAgbGVmdF9qb2luKGF1dHJlX3BhcmFtZXRyZSAlPiUgCiAgICAgICAgICAgICAgc2VsZWN0KGNvZGVfcGFyYW1ldHJlLG5vbV9wYXJhbWV0cmUpLGJ5PSJjb2RlX3BhcmFtZXRyZSIpJT4lCiAgdW5ncm91cCgpICU+JSAKICBzZWxlY3QoLWNvZGVfcGFyYW1ldHJlKSAjJT4lIAoKbW95X21lbnMgJT4lCiBmaWx0ZXIobWVhbl9tb250aCA+PSAwICYgbWVhbl9tb250aCA8PSAyLjk1KSAlPiUKIGdncGxvdCgpICsKIGFlcyh4ID0gZGF0ZSwgeSA9IG1lYW5fbW9udGgsIGNvbG91ciA9IG5vbV9wYXJhbWV0cmUsIGdyb3VwID0gbm9tX3BhcmFtZXRyZSkgKwogZ2VvbV9saW5lKHNpemUgPSAxTCkgKwogc2NhbGVfY29sb3JfaHVlKCkgKwogbGFicyh4ID0gIkRhdGUiLCB5ID0gIk1veWVubmVzIG1lbnN1ZWxsZXMiLCB0aXRsZSA9ICJNb3llbm5lIHN1ciBzdGF0aW9ucyBub24tcmVmw6lyZW50ZXMiLCBzdWJ0aXRsZSA9ICJUb3AgMTUgc3Vic3RhbmNlcyIpICsKIHRoZW1lX21pbmltYWwoKQoKYGBgCgojIyMgUGVzdGljaWRlcyBTZXBhcsOpcyA6CgpgYGB7cn0Kc3RhdGVfcGxvdHMgPC0gcGFzdGUwKGxpc3QuZmlsZXMoInBsb3RzL3BhcmFtX3N0YXRpb25fTk9OX3JlZl9Nb3lfbW9udGgiLCBmdWxsLm5hbWVzID0gVFJVRSkpCm5hbWVzKHN0YXRlX3Bsb3RzKSA8LSBzdHJfcmVwbGFjZV9hbGwoc3RhdGVfcGxvdHMsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMoIlxcLnBuZyIgPSAiIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGxvdHMvcGFyYW1fc3RhdGlvbl9OT05fcmVmX01veV9tb250aCIgPSAiIikpCgpic3NlbGVjdChzdGF0ZV9wbG90cywgdHlwZSA9ICJpbWciLCBzZWxlY3RlZCA9ICIyLWh5ZHJveHkgYXRyYXppbmUiLCAKICAgICAgICAgbGl2ZV9zZWFyY2ggPSBUUlVFLCBzaG93X3RpY2sgPSBUUlVFKQpgYGAKCmBgYHtyfQojIHN0YXRlX3Bsb3RzIDwtIHBhc3RlMChsaXN0LmZpbGVzKCJwbG90cy9wYXJhbV9zdGF0aW9uX05PTl9yZWZfTW95X21vbnRoIiwgZnVsbC5uYW1lcyA9IFRSVUUpKQojIG5hbWVzKHN0YXRlX3Bsb3RzKSA8LSBzdHJfcmVwbGFjZV9hbGwoc3RhdGVfcGxvdHMsIAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYygiXFwucG5nIiA9ICIiLCAKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBsb3RzL3BhcmFtX3N0YXRpb25fTk9OX3JlZl9Nb3lfbW9udGgiID0gIiIpKQojIAojIGJzc2VsZWN0KHN0YXRlX3Bsb3RzLCB0eXBlID0gImltZyIsIHNlbGVjdGVkID0gIjItaHlkcm94eSBhdHJhemluZSIsIAojICAgICAgICAgIGxpdmVfc2VhcmNoID0gVFJVRSwgc2hvd190aWNrID0gVFJVRSkKCmBgYAoKPCEtLSAjIyMgTGUgUDkwIDogIC0tPgoKPCEtLSBgYGB7cn0gLS0+CjwhLS0gUDkwX21lbnMgPC0gUDkwX21vaXNfZW5zZW1ibGVfU3RhdGlvbih0YWJsZV9zdGF0aW9uID0gYXV0cmVfc3RhdGlvbix0YWJsZV9wcmVsZXZlbWVudCA9IGF1dHJlX3ByZWxldmVtZW50LCAtLT4KPCEtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2FuYWx5c2UgPSBhdXRyZV9hbmFseXNlICU+JSBzZWxlY3QoLWRhdGVfcHJlbGV2ZW1lbnQpKSAlPiUgZmlsdGVyKCFpcy5uYShjb2RlX3BhcmFtZXRyZSkpICU+JSAgLS0+CjwhLS0gICBsZWZ0X2pvaW4oYXV0cmVfcGFyYW1ldHJlICU+JSAgLS0+CjwhLS0gICAgICAgICAgICAgICBzZWxlY3QoY29kZV9wYXJhbWV0cmUsbm9tX3BhcmFtZXRyZSksYnk9ImNvZGVfcGFyYW1ldHJlIiklPiUgLS0+CjwhLS0gICB1bmdyb3VwKCkgJT4lICAtLT4KPCEtLSAgIHNlbGVjdCgtY29kZV9wYXJhbWV0cmUpICMlPiUgIC0tPgoKPCEtLSBQOTBfbWVucyAlPiUgLS0+CjwhLS0gIGZpbHRlcihQOTBfbW9udGggPj0gMCAmIFA5MF9tb250aCA8PSAyLjk1KSAlPiUgLS0+CjwhLS0gIGdncGxvdCgpICsgLS0+CjwhLS0gIGFlcyh4ID0gZGF0ZSwgeSA9IFA5MF9tb250aCwgY29sb3VyID0gbm9tX3BhcmFtZXRyZSwgZ3JvdXAgPSBub21fcGFyYW1ldHJlKSArIC0tPgo8IS0tICBnZW9tX2xpbmUoc2l6ZSA9IDFMKSArIC0tPgo8IS0tICBzY2FsZV9jb2xvcl9odWUoKSArIC0tPgo8IS0tICBsYWJzKHggPSAiRGF0ZSIsIHkgPSAiUDkwIG1lbnN1ZWxsZXMiLCB0aXRsZSA9ICJQOTAgc3VyIHN0YXRpb25zIG5vbi1yZWbDqXJlbnRlcyIsIHN1YnRpdGxlID0gIlRvcCAxNSBzdWJzdGFuY2VzIikgKyAtLT4KPCEtLSAgdGhlbWVfbWluaW1hbCgpIC0tPgoKPCEtLSBgYGAgLS0+CgojIyMgQ3VtdWwgcGFyIG1vaXMgZGVzIHByaW5jaXBhbGVzIHN1YnN0YW5jZXMgOjoKCmBgYHtyfQpjdW11bF90b3AyMCA8LSBhdXRyZV9hbmFseXNlICU+JSAKICBtdXRhdGUoYW5uZWU9eWVhcihkYXRlX3ByZWxldmVtZW50KSxtb250aD1tb250aChkYXRlX3ByZWxldmVtZW50KSkgJT4lIAogIGdyb3VwX2J5KGFubmVlLG1vbnRoKSAlPiUgCiAgbXV0YXRlKGN1bXVsX21vaXMgPSBzdW0ocmVzdWx0YXRfYW5hbHlzZSkpICU+JSAKICBzZWxlY3QoYW5uZWUsbW9udGgsY3VtdWxfbW9pcyxkYXRlX3ByZWxldmVtZW50KSAlPiUgCiAgZGlzdGluY3QoKQoKY3VtdWxfdG9wMjBfYW5hbCA8LSBhdXRyZV9hbmFseXNlICU+JSAKICBtdXRhdGUoYW5uZWU9eWVhcihkYXRlX3ByZWxldmVtZW50KSxtb250aD1tb250aChkYXRlX3ByZWxldmVtZW50KSkgJT4lIAogIGdyb3VwX2J5KGFubmVlLG1vbnRoKSAlPiUgCiAgY291bnQobmFtZSA9ICJuYl9hbmFseXNlIikgJT4lIAogICNzZWxlY3QoYW5uZWUsbW9udGgsbmJfYW5hbHlzZSxkYXRlX3ByZWxldmVtZW50KSAlPiUgCiAgZGlzdGluY3QoKQoKY3VtdWxfdG9wMjAgPC0gY3VtdWxfdG9wMjAgJT4lIGxlZnRfam9pbihjdW11bF90b3AyMF9hbmFsLGJ5PWMoImFubmVlIiwibW9udGgiKSkKCnJlbW92ZShjdW11bF90b3AyMF9hbmFsKQoKY3VtdWxfdG9wMjAgJT4lCiBnZ3Bsb3QoKSArCiBhZXMoeCA9IGRhdGVfcHJlbGV2ZW1lbnQpKyAgICAgICAjLCBjb2xvdXIgPSBub21fcGFyYW1ldHJlLCBncm91cCA9IG5vbV9wYXJhbWV0cmUpICsKICBnZW9tX2xpbmUoYWVzKHkgPSBjdW11bF9tb2lzLCBjb2xvciA9ICJDdW11bCIpKSArIAogIGdlb21fbGluZShhZXMoeSA9IG5iX2FuYWx5c2UsIGNvbG9yPSJOYl9hbmFseXNlcyIpLCBsaW5ldHlwZT0idHdvZGFzaCIpICArCiAjc2NhbGVfY29sb3JfaHVlKCkgKwogICAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImRhcmtyZWQiLCAic3RlZWxibHVlIikpICsKIGxhYnMoeCA9ICJEYXRlIiwgeSA9ICJjdW11bCBtZW5zdWVsbGVzIiwgdGl0bGUgPSAiQ3VtdWwgZGVzIHN1YnN0YW5jZXMgc3VyIGxlcyBzdGF0aW9ucyBOb24tcmVmcyIsIHN1YnRpdGxlID0gIlRvcCAxNSBzdWJzdGFuY2VzIikgKwogdGhlbWVfbWluaW1hbCgpCgpgYGAKCiMjIyBOb3RlcyBkZXMgc3RhdGlvbnMgTm9uLXLDqWbDqXJlbnRlcyA6CgpgYGB7cn0KCm5vdGVfc3RhdGlvbiA8LSAgbmJfU1RBVElPTl9hbm5lX2FuZF9wcmVsZXZlbWVudCAlPiUgCiAgaW5uZXJfam9pbihhdXRyZV9zdGF0aW9uLGJ5PSJjb2RlX3N0YXRpb24iKSAlPiUgCiAgbXV0YXRlKG5vdGVfcHJldiA9IGlmZWxzZShuYl9tb3lfcHJldl9hbjwzLDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShuYl9tb3lfcHJldl9hbjw2LDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UobmJfbW95X3ByZXZfYW48MTIsMiwzKSkpKSAlPiUgCiAgbXV0YXRlKG5vdGVfbmJfc3Vic3RhbmNlID0gIGlmZWxzZShuYl9hbmFseXNlc19yZWNoZXJjaGVzPDUwLDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UobmJfYW5hbHlzZXNfcmVjaGVyY2hlczwxMDAsMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UobmJfYW5hbHlzZXNfcmVjaGVyY2hlczwyMDAsMiwzKSkpKSAlPiUgCiAgc2VsZWN0KGNvZGVfc3RhdGlvbixub3RlX25iX3N1YnN0YW5jZSxub3RlX3ByZXYpICU+JSAKICAgIG11dGF0ZShub3RlX3RvdGFsX3N0YXQgPSBpZmVsc2Uobm90ZV9uYl9zdWJzdGFuY2UgKyBub3RlX3ByZXY+NCwiZm9ydGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2Uobm90ZV9uYl9zdWJzdGFuY2UgKyBub3RlX3ByZXY+MiwibW95ZW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhaWJsZSIpKSkKCgpEVDo6ZGF0YXRhYmxlKG5vdGVfc3RhdGlvbixjYXB0aW9uID0gIk5vdGVzIGRlcyBkaWZmw6lyZW50ZXMgc3RhdGlvbnMgTm9uLXLDqWbDqXJlbnRlcyIpCm5iX25vdGUgPC0gbm90ZV9zdGF0aW9uICU+JSBncm91cF9ieShub3RlX3RvdGFsX3N0YXQpICU+JSAKICBjb3VudChuYW1lPSJuYl9zdGF0aW9uIikgJT4lIGZpbHRlcighaXMubmEobm90ZV90b3RhbF9zdGF0KSkKbm90ZV9zdGF0aW9uJG5vdGVfdG90YWxfc3RhdCA8LSBhcy5mYWN0b3Iobm90ZV9zdGF0aW9uJG5vdGVfdG90YWxfc3RhdCkKZ2dwbG90KGRhdGEgPSBuYl9ub3RlLCBhZXMoeD1ub3RlX3RvdGFsX3N0YXQpKSArCiAgZ2VvbV9jb2woYWVzKHk9bmJfc3RhdGlvbikpCgpgYGAKCgojIyMgTm90ZXMgZGVzIHN1YnN0YW5jZXMgc3VyIHN0YXRpb25zIE5vbi1yZWbDqXJlbnRlcyA6CgoKYGBge3J9CiMgYXV0cmVfYW5hbHlzZV90b3QyIDwtIGF1dHJlX2FuYWx5c2VfdG90ICU+JSBzZWxlY3QoLWMoZGF0ZV9wcmVsZXZlbWVudCxjb2RlX3N0YXRpb24pKQojIG5vdGVfc3Vic3RhbmNlIDwtIGF1dHJlX3N0YXRpb24gJT4lIGxlZnRfam9pbihhdXRyZV9wcmVsZXZlbWVudCxieT0iY29kZV9zdGF0aW9uIikgJT4lIAojICAgbGVmdF9qb2luKGF1dHJlX2FuYWx5c2VfdG90MiAsYnk9ImNvZGVfcHJlbGV2ZW1lbnQiKSAlPiUgCiMgICBtdXRhdGUoYW5uZWUgPSB5ZWFyKGRhdGVfcHJlbGV2ZW1lbnQpKSAlPiUgCiMgICBzZWxlY3QoY29kZV9wYXJhbWV0cmUsYW5uZWUsY29kZV9zdGF0aW9uKSAlPiUgCiMgICBkaXN0aW5jdCgpICU+JSAKIyAgIGdyb3VwX2J5KGNvZGVfcGFyYW1ldHJlLGFubmVlKSAlPiUgCiMgICBjb3VudChuYW1lPSJuYl9zdGF0aW9uIikgCiMgICAKIyBub3RlX3N1YnN0YW5jZV8yIDwtIGF1dHJlX3N0YXRpb24gJT4lIGxlZnRfam9pbihhdXRyZV9wcmVsZXZlbWVudCxieT0iY29kZV9zdGF0aW9uIikgJT4lIAojICAgbGVmdF9qb2luKGF1dHJlX2FuYWx5c2VfdG90MixieT0iY29kZV9wcmVsZXZlbWVudCIpICU+JSAKIyAgIG11dGF0ZShhbm5lZSA9IHllYXIoZGF0ZV9wcmVsZXZlbWVudCkpICU+JSAKIyAgIHNlbGVjdChjb2RlX3BhcmFtZXRyZSxhbm5lZSxjb2RlX3ByZWxldmVtZW50KSAlPiUgCiMgICBkaXN0aW5jdCgpICU+JSAKIyAgIGdyb3VwX2J5KGNvZGVfcGFyYW1ldHJlLGFubmVlKSAlPiUgCiMgICBjb3VudChuYW1lPSJmcnFfcHJlbGV2ZW1lbnQiKSAKIyAKIyBub3RlX3N1YnN0YW5jZSA8LSBub3RlX3N1YnN0YW5jZSAlPiUgCiMgICBsZWZ0X2pvaW4obm90ZV9zdWJzdGFuY2VfMixieT1jKCJjb2RlX3BhcmFtZXRyZSIsImFubmVlIikpICU+JSAKIyAgIGlubmVyX2pvaW4oYXV0cmVfcGFyYW1ldHJlLGJ5PSJjb2RlX3BhcmFtZXRyZSIpICU+JSAKIyAgIG11dGF0ZShub3RlX3N0YXRpb24gPSBpZmVsc2UobmJfc3RhdGlvbjwyMCwwLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShuYl9zdGF0aW9uPDUwLDEsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShuYl9zdGF0aW9uPDEwMCwyLDMpKSkpICU+JSAKIyAgIG11dGF0ZShmcnFfcHJ2bHQgPSBmcnFfcHJlbGV2ZW1lbnQvbmJfc3RhdGlvbikgJT4lIAojICAgbXV0YXRlKG5vdGVfZnJxID0gaWZlbHNlKGZycV9wcnZsdDwyLDAsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGZycV9wcnZsdDw2LDEsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShmcnFfcHJ2bHQ8MTAsMiwzKSkpKSAlPiUgCiMgICB1bmdyb3VwKCkgJT4lIAojICAgc2VsZWN0KGNvZGVfcGFyYW1ldHJlLG5vdGVfc3RhdGlvbixub3RlX2ZycSxhbm5lZSkgJT4lIAojICAgbXV0YXRlKG5vdGVfdG90YWxfc3Vic3RhbmNlID0gaWZlbHNlKG5vdGVfc3RhdGlvbiArIG5vdGVfZnJxPjQsImZvcnRlIiwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2Uobm90ZV9zdGF0aW9uICsgbm90ZV9mcnE+MiwibW95ZW4iLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFpYmxlIikpKQojIAojIHJlbW92ZShub3RlX3N1YnN0YW5jZV8yKQojIAojIERUOjpkYXRhdGFibGUobm90ZV9zdWJzdGFuY2UsY2FwdGlvbiA9ICJOb3RlcyBkZXMgZGlmZsOpcmVudGVzIHN1YnN0YW5jZXMgc3VyIHN0YXRpb25zIHLDqWbDqXJlbnRlcyIpCiMgCiMgCiMgbm90ZV9zdWJzdGFuY2Ukbm90ZV90b3RhbF9zdWJzdGFuY2UgPC0gYXMuZmFjdG9yKG5vdGVfc3Vic3RhbmNlJG5vdGVfdG90YWxfc3Vic3RhbmNlKQojIGdncGxvdChub3RlX3N1YnN0YW5jZSwgYWVzKGFubmVlLCBuYl9zdWJzdGFuY2UsIGZpbGw9bm90ZV90b3RhbF9zdWJzdGFuY2UpKSsKIyAgICAgZ2VvbV9iYXIoc3RhdD0iaWRlbnRpdHkiKSArCiMgICAgIGdlb21fdGV4dChhZXMobGFiZWw9bmJfc3Vic3RhbmNlKSwgdmp1c3Q9LTEyLCBzaXplPTMsIGhqdXN0PTEpCgphdXRyZV9hbmFseXNlX3RvdDIgPC0gYXV0cmVfYW5hbHlzZV90b3QgJT4lIHNlbGVjdCgtYyhkYXRlX3ByZWxldmVtZW50LGNvZGVfc3RhdGlvbikpCgpub3RlX3N1YnN0YW5jZSA8LSBhdXRyZV9zdGF0aW9uICU+JSBsZWZ0X2pvaW4oYXV0cmVfcHJlbGV2ZW1lbnQsYnk9ImNvZGVfc3RhdGlvbiIpICU+JSAKICBsZWZ0X2pvaW4oYXV0cmVfYW5hbHlzZV90b3QyICxieT0iY29kZV9wcmVsZXZlbWVudCIpICU+JSAKICBtdXRhdGUoYW5uZWUgPSB5ZWFyKGRhdGVfcHJlbGV2ZW1lbnQpKSAlPiUgCiAgc2VsZWN0KGNvZGVfcGFyYW1ldHJlLGFubmVlLGNvZGVfc3RhdGlvbikgJT4lIAogIGRpc3RpbmN0KCkgJT4lIAogIGdyb3VwX2J5KGNvZGVfcGFyYW1ldHJlLGFubmVlKSAlPiUgCiAgY291bnQobmFtZT0ibmJfc3RhdGlvbiIpIAogIApub3RlX3N1YnN0YW5jZV8yIDwtIGF1dHJlX3N0YXRpb24gJT4lIGxlZnRfam9pbihhdXRyZV9wcmVsZXZlbWVudCxieT0iY29kZV9zdGF0aW9uIikgJT4lIAogIGxlZnRfam9pbihhdXRyZV9hbmFseXNlX3RvdDIsYnk9ImNvZGVfcHJlbGV2ZW1lbnQiKSAlPiUgCiAgbXV0YXRlKGFubmVlID0geWVhcihkYXRlX3ByZWxldmVtZW50KSkgJT4lIAogIHNlbGVjdChjb2RlX3BhcmFtZXRyZSxhbm5lZSxjb2RlX3ByZWxldmVtZW50KSAlPiUgCiAgZGlzdGluY3QoKSAlPiUgCiAgZ3JvdXBfYnkoY29kZV9wYXJhbWV0cmUsYW5uZWUpICU+JSAKICBjb3VudChuYW1lPSJmcnFfcHJlbGV2ZW1lbnQiKSAKCm5vdGVfc3Vic3RhbmNlXzMgPC0gYXV0cmVfc3RhdGlvbiAlPiUgbGVmdF9qb2luKGF1dHJlX3ByZWxldmVtZW50LGJ5PSJjb2RlX3N0YXRpb24iKSAlPiUgCiAgbGVmdF9qb2luKGF1dHJlX2FuYWx5c2VfdG90MixieT0iY29kZV9wcmVsZXZlbWVudCIpICU+JSAKICBtdXRhdGUoYW5uZWUgPSB5ZWFyKGRhdGVfcHJlbGV2ZW1lbnQpKSAlPiUgCiAgc2VsZWN0KGNvZGVfcGFyYW1ldHJlLGFubmVlKSAlPiUgCiAgZGlzdGluY3QoKSAlPiUgCiAgZ3JvdXBfYnkoYW5uZWUpICU+JSAKICBjb3VudChuYW1lPSJuYl9zdWJzdGFuY2UiKSAKCm5vdGVfc3Vic3RhbmNlIDwtIG5vdGVfc3Vic3RhbmNlICU+JSAKICBsZWZ0X2pvaW4obm90ZV9zdWJzdGFuY2VfMixieT1jKCJjb2RlX3BhcmFtZXRyZSIsImFubmVlIikpICU+JSAKICBpbm5lcl9qb2luKHBhcmFtZXRyZSxieT0iY29kZV9wYXJhbWV0cmUiKSAlPiUgCiAgbXV0YXRlKG5vdGVfc3RhdGlvbiA9IGlmZWxzZShuYl9zdGF0aW9uPDIwLDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShuYl9zdGF0aW9uPDUwLDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UobmJfc3RhdGlvbjwxMDAsMiwzKSkpKSAlPiUgCiAgbXV0YXRlKGZycV9wcnZsdCA9IGZycV9wcmVsZXZlbWVudC9uYl9zdGF0aW9uKSAlPiUgCiAgbXV0YXRlKG5vdGVfZnJxID0gaWZlbHNlKGZycV9wcnZsdDwyLDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShmcnFfcHJ2bHQ8NiwxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGZycV9wcnZsdDwxMCwyLDMpKSkpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNlbGVjdChjb2RlX3BhcmFtZXRyZSxub3RlX3N0YXRpb24sbm90ZV9mcnEsYW5uZWUpICU+JSAKICBtdXRhdGUobm90ZV90b3RhbF9zdWJzdGFuY2UgPSBpZmVsc2Uobm90ZV9zdGF0aW9uICsgbm90ZV9mcnE+NCwiZm9ydGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2Uobm90ZV9zdGF0aW9uICsgbm90ZV9mcnE+MiwibW95ZW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhaWJsZSIpKSkgJT4lIAogIGxlZnRfam9pbihub3RlX3N1YnN0YW5jZV8zLGJ5PSJhbm5lZSIpIAoKcmVtb3ZlKG5vdGVfc3Vic3RhbmNlXzIpCgpEVDo6ZGF0YXRhYmxlKG5vdGVfc3Vic3RhbmNlLGNhcHRpb24gPSAiTm90ZXMgZGVzIGRpZmbDqXJlbnRlcyBzdWJzdGFuY2VzIHN1ciBzdGF0aW9ucyByw6lmw6lyZW50ZXMiKQoKCm5vdGVfc3Vic3RhbmNlJG5vdGVfdG90YWxfc3Vic3RhbmNlIDwtIGFzLmZhY3Rvcihub3RlX3N1YnN0YW5jZSRub3RlX3RvdGFsX3N1YnN0YW5jZSkKIyBnZ3Bsb3QoZGF0YT1ub3RlX3N1YnN0YW5jZSwgYWVzKGFubmVlKSkrCiMgICBnZW9tX2JhcihhZXMoZmlsbD1hcy5mYWN0b3Iobm90ZV90b3RhbF9zdWJzdGFuY2UpKSwgcG9zaXRpb249ImZpbGwiKQoKIyBnZ3Bsb3QoZGF0YT1ub3RlX3N1YnN0YW5jZSwKIyAgICAgICAgYWVzKHg9YW5uZWUseT0oLi5jb3VudC4uKS9zdW0oLi5jb3VudC4uKSwKIyAgICAgICAgICAgIGZpbGwgPSBub3RlX3RvdGFsX3N1YnN0YW5jZSkpICsgCiMgICBnZW9tX2Jhcih3aWR0aCA9IDAuOSkgKwojICAgIGdlb21fdGV4dChhZXMobGFiZWw9bmJfc3Vic3RhbmNlKSwgdmp1c3Q9MCkKCmdncGxvdChub3RlX3N1YnN0YW5jZSwgYWVzKGFubmVlLCBuYl9zdWJzdGFuY2UsIGZpbGw9bm90ZV90b3RhbF9zdWJzdGFuY2UpKSsKICAgIGdlb21fYmFyKHN0YXQ9ImlkZW50aXR5IikgKwogICAgZ2VvbV90ZXh0KGFlcyhsYWJlbD1uYl9zdWJzdGFuY2UpLCB2anVzdD0tMTIsIHNpemU9MywgaGp1c3Q9MSkKYGBgCgpBdmVjIGxlIG5vbWJyZXMgZGUgc3Vic3RhbmNlcyBhbmFseXPDqWUgcGFyIGFubsOpZXMuCgojIyB7LX0KCiMjIERlcGFzc2VtZW50IGR1IFBORUMgIHsudGFic2V0IC50YWJzZXQtcGlsbHN9CgojIyMgQ290ZSDDoCBjb3RlICA6IAoKYGBge3J9CnJlZl9QTkVDIDwtIHJlZl9QTkVDICU+JSAgbXV0YXRlKHJlZmVyZW50ZXMgPSBUUlVFKQphdXRyZV9QTkVDIDwtIGF1dHJlX1BORUMgJT4lICBtdXRhdGUocmVmZXJlbnRlcyA9IEZBTFNFKQojIFBORUMgPC0gcmVmX1BORUMgJT4lIGZ1bGxfam9pbihhdXRyZV9QTkVDLGJ5PSJjb2RlX3BhcmFtZXRyZSIpICU+JSAKIyAgIHVuZ3JvdXAoKSAlPiUgCiMgICBtdXRhdGUobm9tX3BhcmFtZXRyZSA9IGlmZWxzZSghaXMubmEobm9tX3BhcmFtZXRyZS54KSxub21fcGFyYW1ldHJlLngsbm9tX3BhcmFtZXRyZS55KSkgJT4lIAojICAgc2VsZWN0KC1ub21fcGFyYW1ldHJlLngsLW5vbV9wYXJhbWV0cmUueSkgJT4lIAojICAgbXV0YXRlKHJlZi54ID0gVFJVRSwgcmVmLnkgPSBGQUxTRSwKIyAgICAgICAgICBwY3QueCA9IGlmZWxzZShpcy5uYShwY3QueCksMCxwY3QueCksCiMgICAgICAgICAgcGN0Lnk9IGlmZWxzZShpcy5uYShwY3QueSksMCxwY3QueSkpIApQTkVDIDwtIGJpbmRfcm93cyhhdXRyZV9QTkVDLHJlZl9QTkVDKQoKZ2dwbG90KFBORUMsIGFlcyhub21fcGFyYW1ldHJlLCBwY3QsIGZpbGwgPSByZWZlcmVudGVzKSkgKwogIGdlb21fY29sKHBvc2l0aW9uID0gImRvZGdlIikgKwogIHRoZW1lKGF4aXMudGV4dC54ICA9IGVsZW1lbnRfdGV4dChhbmdsZT05MCwgdmp1c3Q9MC41LCBzaXplPTE2KSkgKwogIGNvb3JkX2ZsaXAoKQoKCiMgZ2dwbG90KFBORUMpICsKIyAgIGdlb21fY29sKGFlcyhub21fcGFyYW1ldHJlLHBjdC54ICksY29sb3VyID0gInJlZCIscG9zaXRpb24gPSAiZG9kZ2UiKSArIAojICAgZ2VvbV9jb2woYWVzKG5vbV9wYXJhbWV0cmUscGN0LnkgKSxjb2xvdXIgPSAiYmx1ZSIscG9zaXRpb24gPSAiZG9kZ2UiKSArIAojIGdndGl0bGUoIk5icmUgZGUgc3RhdGlvbiBwYXIgbW95IGRlIHByw6lsZXZlbWVudCBwYXIgYW5zICIpICsKIyAgIHlsYWIoIk5vbWJyZSBkZSBzdGF0aW9ucyIpICsKIyAgIHhsYWIoIk5vbWJyZSBkZSBwcsOpbGV2ZW1lbnQgcGFyIGFuIikKCmBgYAoKCiMjIyBTdXIgc3RhdGlvbnMgcmVmZXJlbnRlcyA6IAoKYGBge3J9CgogIAogIGdncGxvdChyZWZfUE5FQyxhZXMobm9tX3BhcmFtZXRyZSxwY3QpKSArCmdndGl0bGUoIkRlcGFzc2VtZW50IGR1IFBORUMgcGFyIG1vaXMgZW4gJSIpICsKICAjeWxhYigiTm9tYnJlIGRlIGRlcGFzc2VtZW50IGFubnVlbCIpICsKICAjeGxhYigiTm9tIGRlIGxhIHN1YnN0YW5jZSIpICsKICAgICAgICBnZW9tX2NvbChuYS5ybT1UUlVFKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggID0gZWxlbWVudF90ZXh0KGFuZ2xlPTkwLCB2anVzdD0wLjUsIHNpemU9MTYpKSArCiAgY29vcmRfZmxpcCgpCgpgYGAKCiMjIyBTdXIgYXV0cmVzIHN0YXRpb25zICA6IAoKYGBge3J9CgogIGdncGxvdChhdXRyZV9QTkVDLGFlcyhub21fcGFyYW1ldHJlLHBjdCkpICsKZ2d0aXRsZSgiRGVwYXNzZW1lbnQgZHUgUE5FQyBwYXIgbW9pcyBlbiAlIikgKwogICN5bGFiKCJOb21icmUgZGUgZGVwYXNzZW1lbnQgYW5udWVsIikgKwogICN4bGFiKCJOb20gZGUgbGEgc3Vic3RhbmNlIikgKwogICAgICAgIGdlb21fY29sKG5hLnJtPVRSVUUpICsKICB0aGVtZShheGlzLnRleHQueCAgPSBlbGVtZW50X3RleHQoYW5nbGU9OTAsIHZqdXN0PTAuNSwgc2l6ZT0xNikpICsKICBjb29yZF9mbGlwKCkKYGBgCgoKIyMgey19CgoKIyMgSVBDRQoKCgpgYGB7cn0KCmF1dHJlX0lQRSA8LSBJUENFX01FKHBhcmFtX1ByaW9EYW5nLGF1dHJlX2FuYWx5c2VfdG90LGF1dHJlX3ByZWxldmVtZW50LGF1dHJlX3N0YXRpb24pICU+JSAKICBhcnJhbmdlKGRlc2MoUmFwcG9ydF9QTkVDKSkgJT4lIAogIGdyb3VwX2J5KGFubmVlLGNvZGVfbWFzc2VfZWF1KSAlPiUgCiAgc3VtbWFyaXNlKHBpcmVfcmFwcG9ydF9QTkVDPW50aChSYXBwb3J0X1BORUMsMSksCiAgICAgICAgICAgIGNvZGVfcGFyYW1ldHJlID0gbnRoKGNvZGVfcGFyYW1ldHJlLDEpKSAlPiUKICB1bmdyb3VwKCkKCmBgYAoKCmBgYHtyfQpyZWZfSVBDRSA8LSBJUENFX01FKHBhcmFtX1ByaW9EYW5nLHJlZl9hbmFseXNlX3RvdCxyZWZfcHJlbGV2ZW1lbnQscmVmX3N0YXRpb24pICU+JSAKICBhcnJhbmdlKGRlc2MoUmFwcG9ydF9QTkVDKSkgJT4lIAogIGdyb3VwX2J5KGFubmVlLGNvZGVfbWFzc2VfZWF1KSAlPiUgCiAgc3VtbWFyaXNlKHBpcmVfcmFwcG9ydF9QTkVDPW50aChSYXBwb3J0X1BORUMsMSksCiAgICAgICAgICAgIGNvZGVfcGFyYW1ldHJlID0gbnRoKGNvZGVfcGFyYW1ldHJlLDEpKSAlPiUKICB1bmdyb3VwKCkgJT4lIAogIGZpbHRlcihwaXJlX3JhcHBvcnRfUE5FQyA+IDAuNSkKCmBgYAoKIyMgRGVwYXNzZW1lbnQgZHUgTlFFX0NNQSBldCBOUUVfTUEgOiB7LnRhYnNldCAudGFic2V0LXBpbGxzfQoKIyMjIFN0YXRpb24gUkVGIAoKYGBge3J9CnJlZl9jb3VudF9ucWVfZGVwYXNzIDwtIHJlZl9jb3VudF9ucWVfZGVwYXNzICU+JSBtdXRhdGUodHlwZV9kZXBhc3NlbWVudCA9ICJNQSIpICMlPiUgCiAgCnJlZl9jb3VudF9ucWVfQ01BX2RlcGFzcyA8LSByZWZfY291bnRfbnFlX0NNQV9kZXBhc3MgJT4lIG11dGF0ZSh0eXBlX2RlcGFzc2VtZW50ID0gIkNNQSIpICMlPiUgCiAgCnJlZl92aWV3X25xZV9kZXBhc3MgPC0gcmJpbmQuZGF0YS5mcmFtZSAgKHJlZl9jb3VudF9ucWVfZGVwYXNzLHJlZl9jb3VudF9ucWVfQ01BX2RlcGFzcykKCgpnZ3Bsb3QocmVmX3ZpZXdfbnFlX2RlcGFzcyxhZXMobm9tX3BhcmFtZXRyZSx0eF9kZXBhc3MpKSArICMsIGZpbGwgPSB0eXBlX2RlcGFzc2VtZW50CmdndGl0bGUoIkRlcGFzc2VtZW50IGR1IE5RRSBwaWMgcG91ciB1bmUgbW9sw6ljdWxlIHN1ciB1bmUgc3RhdGlvbiIpICsKICB5bGFiKCJOb21icmUgZGUgZGVwYXNzZW1lbnQgYW5udWVsIikgKwogIHhsYWIoIk5vbSBkZSBsYSBzdWJzdGFuY2UiKSArCiAgICAgICAgZ2VvbV9jb2wobmEucm09VFJVRSkgKyBjb29yZF9mbGlwKCkgKwogIGZhY2V0X3dyYXAofnR5cGVfZGVwYXNzZW1lbnQpICsKICAgICAgICBnZW9tX3RleHQoYWVzKGxhYmVsPW5iX2FuYWwpLCB2anVzdD0wKSAKCiMgSVBDRV90b3RfdHhfTUUgPC0gSVBDRV90b3QgJT4lIGxlZnRfam9pbihzdGF0aW9uICU+JSBzZWxlY3QoY29kZV9zdGF0aW9uLGNvZGUpLGJ5PSJjb2RlX3N0YXRpb24iKSAlPiUgCiMgICBncm91cF9ieShhbm5lZSxjb2RlKSAlPiUgbXV0YXRlKFJhcHBvcnRfUE5FQyA9IG1lYW4oUmFwcG9ydF9QTkVDKSApICU+JSBzZWxlY3QoY29kZSxhbm5lZSxSYXBwb3J0X1BORUMpICU+JSAKIyAgIHVuZ3JvdXAoKSAlPiUgICBkaXN0aW5jdCgpICU+JSAKIyAgIGFycmFuZ2UoY29kZSxhbm5lZSkgJT4lIAojICAgZ3JvdXBfYnkoY29kZSkgJT4lIG11dGF0ZShjYWxjdWxfYmFzZV8xMDAgPSBmaXJzdChSYXBwb3J0X1BORUMpKSAlPiUgCiMgICB1bmdyb3VwKCkgJT4lIAojICAgZ3JvdXBfYnkoYW5uZWUsY29kZSkgJT4lICBtdXRhdGUoYmFzZV8xMDAgPSBSYXBwb3J0X1BORUMvY2FsY3VsX2Jhc2VfMTAwICogMTAwKSAlPiUgCiMgICBsZWZ0X2pvaW4obmJfU0FHRV9wcnZsdF9wYXJfYW4sYnk9YygiY29kZSIsImFubmVlIikpCgpgYGAKCiMjIyBTdGF0aW9uIE5vbi1SRUYgCgoKYGBge3J9CgphdXRyZV9jb3VudF9ucWVfZGVwYXNzIDwtIGF1dHJlX2NvdW50X25xZV9kZXBhc3MgJT4lIG11dGF0ZSh0eXBlX2RlcGFzc2VtZW50ID0gIk1BIikgIyU+JSAKICAKYXV0cmVfY291bnRfbnFlX0NNQV9kZXBhc3MgPC0gYXV0cmVfY291bnRfbnFlX0NNQV9kZXBhc3MgJT4lIG11dGF0ZSh0eXBlX2RlcGFzc2VtZW50ID0gIkNNQSIpICMlPiUgCiAgCmF1dHJlX3ZpZXdfbnFlX2RlcGFzcyA8LSByYmluZC5kYXRhLmZyYW1lICAoYXV0cmVfY291bnRfbnFlX2RlcGFzcyxhdXRyZV9jb3VudF9ucWVfQ01BX2RlcGFzcykKCmdncGxvdChhdXRyZV92aWV3X25xZV9kZXBhc3MsYWVzKG5vbV9wYXJhbWV0cmUsdHhfZGVwYXNzKSkgKyAjLCBmaWxsID0gdHlwZV9kZXBhc3NlbWVudApnZ3RpdGxlKCJEZXBhc3NlbWVudCBkdSBOUUUgcGljIHBvdXIgdW5lIG1vbMOpY3VsZSBzdXIgdW5lIHN0YXRpb24iKSArCiAgeWxhYigiTm9tYnJlIGRlIGRlcGFzc2VtZW50IGFubnVlbCIpICsKICB4bGFiKCJOb20gZGUgbGEgc3Vic3RhbmNlIikgKwogICAgICAgIGdlb21fY29sKG5hLnJtPVRSVUUpICsgY29vcmRfZmxpcCgpICsKICBmYWNldF93cmFwKH50eXBlX2RlcGFzc2VtZW50KSArCiAgICAgICAgZ2VvbV90ZXh0KGFlcyhsYWJlbD1uYl9hbmFsKSwgdmp1c3Q9MCkgCgpgYGAKCnstfQoKCiMjIExlIHNlcUVhdSA6IAoKCiMjIyBTdGF0aW9uIFJFRiAKCmBgYHtyfQoKcGxvdChncmFwaGVfcmVmKQoKYGBgCgojIyMgU3RhdGlvbiBOb24tUkVGIAoKCmBgYHtyfQoKcGxvdChncmFwaGVfbm9uX3JlZikKCgpgYGAKCgoKYGBge3J9CgoKYGBgCg==